【问题标题】:Is echo vallid syntax in teradata BTEQ是 teradata BTEQ 中的 echo vallid 语法
【发布时间】:2018-08-25 04:27:30
【问题描述】:

谁能解释一下下面的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;

谁能解释一下这段代码

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及重现它所需的最短代码在问题本身。没有清晰的问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • 这段代码我看不懂,是别人写的。你能解释一下这里发生了什么
  • 这不是 BTEQ 脚本,它是一个 shell 脚本 可能会创建一个稍后与 BTEQ 一起提交的脚本
  • 是echo bteq脚本命令,或者是linux命令。它在这里有效吗?我可以在 bteq 上运行这个查询吗

标签: teradata sql-scripts


【解决方案1】:

见: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

【讨论】:

  • 是echo bteq脚本命令,或者是linux命令。这里有效吗
  • echo 是许多语言和系统中的常用术语,在这种情况下,它看起来是一个 bash / 终端命令,因为它与 1>2>&1 一起使用
  • 那这不是bteq解析的吗?如果我运行这个
  • @XYZ 不,所有“回显”出来的内容都将由终端运行。我更新了我的答案。
【解决方案2】:

事实上,它既不是一个 unix 脚本,也不是一些 code,也不是 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;

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

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

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

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

为什么要使用点命令来执行一个名为.parm的脚本,这超出了我的想象。

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 2018-05-24
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2023-03-22
    • 2021-08-18
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多