尝试将包含特殊字符的对象的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;
但这似乎不适用于脚本。它适用于没有特殊字符/要求包含引号的表。
感谢任何帮助。
答案 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