从bash中的文件执行SQL
问题描述:
我想从bash中的文件加载sql并执行加载的sql。该sql文件需要是多功能的,这意味着它不能被改变,以便在bash中运行时容易(转义特殊字符如*) 因此,我遇到了一些问题:从bash中的文件执行SQL
如果我读了我的示例。 SQL
SELECT * FROM SAMPLETABLE
给一个变量与
ab=`cat sample.sql`
并执行它
db2 `echo $ab`
我收到一个sql错误,因为通过执行一个cat,*已被sample.sql的目录中的所有文件取代。
简单的解决方案是将“”替换为“\”。但我不能这样做,因为该文件需要保持可执行程序,如DB Visualizer等
有人能给我提示正确的方向吗?
答
从文件中重定向stdin。
db2 < sample.sql
答
DB2命令行处理器具有接受文件名作为输入选项,所以你不应该需要从一个文本文件加载语句进入一个shell变量。
该命令将执行所有SQL语句中的文件,以作为语句终止治疗的新行:
db2 -f sample.sql
该命令将执行所有SQL语句中的文件,以作为语句终止处理分号:
db2 -t -f sample.sql
其他有用的CLP标志是:
- -x:Suppr ESS列标题
- -v:回声语句文本之前执行
- -z:三通所有CLP输出到文件名的副本立即这个标志下面
答
在情况下,你有一个变量在你的脚本中使用,并希望得到它取代由DB2之前执行的外壳,然后用这个办法:的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
外壳将取代全局变量,然后DB2将执行它。 希望它有帮助。
因为你没有引用你的变量'''(echo“$ ab”)'',所以'*'正在扩大。但请使用下面的答案之一。 – 2011-04-26 15:10:57