DB2 CLI 是否支持 SQL 中需要从 bash 脚本执行的参数标记 [AIX]
Does DB2 CLI support parameters markers in SQL that needs to be executed from a bash script [AIX]
db2 -x
或 db2 -f filename.sql
选项是否支持使用参数标记?我正在从 bash 脚本调用 SQL 语句。到目前为止我找不到任何选项,我想我必须在 bash 中使用字符串连接并将 SQL 传递给 db2 -x
,这看起来不太整洁。
DB2 CLP 不支持使用参数标记。
但是,当您 运行 db2 是非交互式的(即来自 shell)时,您可以替换 shell 变量:
$ v=4
$ db2 "select count(*) from syscat.tables where card = ${v}"
因为这只是使用 shell 替换,所以您需要处理在字符串周围添加单引号 (... where tabschema = '${tabschema}' ...
),如果您的字符串有单引号,这会变得更加复杂。
您也可以在 shell 脚本循环中使用此方法:
#!/bin/ksh
db2 connect to sample
for v in 1 2 3 4 5 ; do
db2 "insert into t1 (c1) values (${v})"
done
db2 terminate
如果您尝试使用参数标记来避免每次执行时都重新编译 SQL 语句,这将无济于事,但是如果您正在寻找它,您可能需要考虑将 perl 与DBI、ruby/ibm_db 等
db2 -x
或 db2 -f filename.sql
选项是否支持使用参数标记?我正在从 bash 脚本调用 SQL 语句。到目前为止我找不到任何选项,我想我必须在 bash 中使用字符串连接并将 SQL 传递给 db2 -x
,这看起来不太整洁。
DB2 CLP 不支持使用参数标记。
但是,当您 运行 db2 是非交互式的(即来自 shell)时,您可以替换 shell 变量:
$ v=4
$ db2 "select count(*) from syscat.tables where card = ${v}"
因为这只是使用 shell 替换,所以您需要处理在字符串周围添加单引号 (... where tabschema = '${tabschema}' ...
),如果您的字符串有单引号,这会变得更加复杂。
您也可以在 shell 脚本循环中使用此方法:
#!/bin/ksh
db2 connect to sample
for v in 1 2 3 4 5 ; do
db2 "insert into t1 (c1) values (${v})"
done
db2 terminate
如果您尝试使用参数标记来避免每次执行时都重新编译 SQL 语句,这将无济于事,但是如果您正在寻找它,您可能需要考虑将 perl 与DBI、ruby/ibm_db 等