当SQL输出到shell脚本

时间:2017-09-19 10:30:18

标签: sql shell db2

尝试将包含特殊字符的对象的SQL查询输出分配给shell脚本中的变量。

直接在数据库上运行:

db2 -x 'select count(*) from <SCHEMA>."/BIC/TEST"'

      11000

然而,当我在脚本中包含它时,我需要使用双引号,因为我使用传递给sql的变量。使用单引号

Output=$(db2 -x 'select count(*) from ${_SCHEMA}."/BIC/TEST"')

echo -e "$Output"

结果:

SQL20521N  Error occurred processing a conditional compilation directive near
"_". Reason code="7".  SQLSTATE=428HV

当我使用双引号时,我点击了:

SQL0104N意外的令牌&#34;&#39; / BIC / TEST&#39;&#34;在&#34; ount(*)

之后被发现

尝试使用另一组双引号来转义双引号:

db2 -x&#39;从$ {_ SCHEMA}中选择计数(*)。&#34;&#34; / BIC / TEST&#34;&#34;&#39;

但这似乎不适用于脚本。它适用于没有特殊字符/要求包含引号的表。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

下面的代码对我来说很好,请注意转义的引号。如果它失败了,您需要提供有关DB2版本和DB2服务器操作系统平台的更多详细信息。

#!/bin/ksh

db2 connect to sample
(($? > 0 )) && print "Failed to connect to database" && exit 1

db2 -o- "drop table \"/bin/test\" "

db2 -v "create table \"/bin/test\"(a integer)"
(($? > 0 )) && print "Create table failed" && exit 1

db2 -v "insert into \"/bin/test\"(a) values(1),(2),(3),(4)"
(($? > 0 )) && print "insert rows failed" && exit 1

db2 -v describe table \"/bin/test\"

typeset -i count_rows=$(db2 -x "select count(*) from \"/bin/test\"" )
(($? > 0 )) && print "query count rows failed" && exit 1

print "\nRow count is: ${count_rows}\n"

db2 -o- connect reset