我正在尝试从bash中的文件加载sql并执行加载的sql。 sql文件需要是通用的,这意味着它不能被改变,以便在bash中运行时简单易行(转义特殊字符,如*) 所以我遇到了一些问题:
如果我读了我的sample.sql
SELECT * FROM SAMPLETABLE
到
的变量ab=`cat sample.sql`
并执行它
db2 `echo $ab`
我收到一个sql错误,因为通过做一个cat *已被sample.sql目录中的所有文件替换。
简单的解决方案是将“”替换为“\ ”。但是我不能这样做,因为文件需要在DB Visualizer等程序中保持可执行。
有人能给我提示正确的方向吗?
答案 0 :(得分:3)
DB2命令行处理器具有接受文件名作为输入的选项,因此您不需要将文本文件中的语句加载到shell变量中。
此命令将执行文件中的所有SQL语句,并将换行符视为语句终止符:
db2 -f sample.sql
此命令将执行文件中的所有SQL语句,并将分号视为语句终止符:
db2 -t -f sample.sql
其他有用的CLP标志是:
答案 1 :(得分:2)
从文件重定向stdin。
db2 < sample.sql
答案 2 :(得分:2)
如果您在脚本中使用了变量,并希望在DB2中执行之前将其替换为shell,那么请使用以下方法:
File.sql
的内容:
cat <<xEOF
insert values(1,2) into ${MY_SCHEMA}.${MY_TABLE};
select * from ${MY_SCHEMA}.${MY_TABLE};
xEOF
在命令提示符中执行:
export MY_SCHEMA='STAR'
export MY_TAVLE='DIMENSION'
然后,您可以在DB2中执行它:
eval File.sq |db2 +p -t
shell将替换全局变量,然后DB2将执行它。 希望它有所帮助。