是teradata BTEQ中的echo vallid语法

时间:2018-03-16 07:13:47

标签: teradata sql-scripts

任何人都可以向我展示下面的bteq代码。

这个脚本有效吗?

exec 1> $CODE/edlr2/logs/AGP_MBR_BTEQ_CSA_MBR_STG_LOAD_$(date +"%Y%m%d_%H%M%S").log 2>&1`echo "script file =" $0 PARM_FILE=$1 echo "parm file= "$PARM_FILE.parm . $CODE/edlr2/scripts/$PARM_FILE.parm select name from customer;

任何人都可以解释这段代码

2 个答案:

答案 0 :(得分:0)

请参阅:https://superuser.com/questions/436586/why-redirect-output-to-21-and-12

exec 1> $CODE/edlr2/logs/AGP_MBR_BTEQ_CSA_MBR_STG_LOAD_$(date +"%Y%m%d_%H%M%S").log

这将写入日志文件

2>&1 `echo "script file =" $0 PARM_FILE=$1 echo "parm file= "$PARM_FILE.parm . $CODE/edlr2/scripts/$PARM_FILE.parm select name from customer;

2>&1将文件描述符#2指向#1(上方)已指向的位置(.log文件)。

然而,看起来你错过了一个结尾的坟墓`因为你在echo之前开始一个但从未关闭它。所以我不认为脚本是有效的。但我也不知道如何设置数据库以评估其余数据库是否有效。除非您能够提供有关文件设置和执行方式的具体错误和信息,否则很难为您提供帮助。

其他信息:exec将在某个位置运行脚本,因此部分:

echo "script file =" $0 PARM_FILE=$1 echo "parm file= "$PARM_FILE.parm . $CODE/edlr2/scripts/$PARM_FILE.parm select name from customer;

本质上是运行命令脚本并将其记录到日志文件中。它将输出并运行类似:

script file=/var/somefile
parm file=/var/someparms.parm
. /var/anotherparmfile.parm select name from customer;

What is exec

What is a dot command

答案 1 :(得分:0)

原样,它既不是unix脚本,也不是exec 1> $CODE/edlr2/logs/AGP_MBR_BTEQ_CSA_MBR_STG_LOAD_$(date +"%Y%m%d_%H%M%S").log 2>&1 echo "script file =" $0 PARM_FILE=$1 echo "parm file= "$PARM_FILE.parm . $CODE/edlr2/scripts/$PARM_FILE.parm select name from customer; ,也不是bteq可以使用的东西。

我的猜测是,你的'剧本'看起来像这样(驳回了孤独的'打字错误)

$PARM_FILE.parm

正如@Xander已经猜到它会将输出重定向到日志文件并打印有关脚本和日志文件名的信息,然后用一些参数执行脚本.parm

进一步猜测,因为在日志文件的名称中提到了BTEQ,在bteq脚本中,bteq可用于执行作为参数传递给它的SQL命令。

.parm需要登录命令。如果在;脚本中添加,在连接参数之前添加,并且传递给bteq,则可能会得到一些有意义的响应。

请注意,最后的end of command永远不会传递给脚本。 shell会将其视为.parm令牌。并且;脚本也必须添加.parm来构造一个有价值的SQL命令。

为什么使用dot-command来执行一个名为dot的脚本超出我的想象。