将Shell中的变量传递给Teradata BTEQ

时间:2017-05-16 14:51:03

标签: bash shell unix teradata

我是Unix和Terdata BTEQ的新手。我想将变量传递给.sh文件,该文件调用具有SQL代码的.sql文件。 在此之前,我试图至少在.sh文件中定义参数值并在.sh文件本身中具有SQL代码。但它似乎不起作用,

以下是我正在尝试的代码,

     temp_table=`PRP_D1_WORK.ADHOC_CMSC_NIEL_BRND_DICT_STG`

    .LOGON tddev/username,Pass

    .SET WIDTH 1500 ;
    .set heading '';

    SELECT COUNT(*) FROM $temp_table;

    .LOGOFF
    .EXIT

现在我使用以下命令在Unix(Via putty)中运行此语句:

bteq < sample.sh 

我在这里得到的错误是$ temp_table不存在,我认为这意味着该变量没有被传递。

一旦我能够实现这一点,我想在执行shell脚本时或者通过定义HERE文档来传递变量值。

让我知道这种情况下的错误是什么。

谢谢, Priyash

2 个答案:

答案 0 :(得分:0)

好的,我能够解决它。 我应该在.sh文件中包含bteq

然后运行.sh而不是bteq&lt; sample.sh

并且有效。

转到下一个问题,我可以将.sh文件顶部定义的参数传递给我将在.sh内调用的.sql文件 运用 .run example.sql

答案 1 :(得分:0)

是的,您可以将参数传递给shell脚本

sample.sh temp_table_name login_id

在脚本中你需要使用$ 1,$ 2 ......所以在第一个参数$ 1,$ 2是第二个参数等等。 这里temp_table是您作为第一个参数传递的temp_table_name,$ 2 = login_id

 temp_table=$1

.LOGON $2/username,Pass

.SET WIDTH 1500 ;
.set heading '';

SELECT COUNT(*) FROM $temp_table;

.LOGOFF
.EXIT