Sql 如何使用*或WHERE子句定义字符串从DB2导出
我使用DB2Export将数据保存到CSV文件中 最终,我需要一个构建的脚本,该脚本将接收SQL,运行它并将其导出。我已经准备好了几乎所有的内容,但是某些查询会导致错误 目前有两种情况会导致错误: 1-使用通配符。外壳扩展杀死了它 将整个SQL封装在中似乎可以解决这个问题,但最佳实践是什么?似乎有些边缘问题我还没有解决 2-我不能在where子句中使用字符串:Sql 如何使用*或WHERE子句定义字符串从DB2导出,sql,db2,export,export-to-csv,Sql,Db2,Export,Export To Csv,我使用DB2Export将数据保存到CSV文件中 最终,我需要一个构建的脚本,该脚本将接收SQL,运行它并将其导出。我已经准备好了几乎所有的内容,但是某些查询会导致错误 目前有两种情况会导致错误: 1-使用通配符。外壳扩展杀死了它 将整个SQL封装在中似乎可以解决这个问题,但最佳实践是什么?似乎有些边缘问题我还没有解决 2-我不能在where子句中使用字符串: bash-3.00$ db2 export to /tmp/text of DEL 'select * from SCHEMA.TABL
bash-3.00$ db2 export to /tmp/text of DEL 'select * from SCHEMA.TABLE where COL='STRING''
SQL3022N An SQL error "-206" occurred while processing the SELECT string in
the Action String parameter.
SQL0206N "STRING" is not valid in the context where it is used.
即使更改为特定列以选择并从整个SQL中删除“”也不会改变它
有什么想法吗
谢谢
Alex当查询字符串中的单引号关闭引号时,必须对其进行转义。看看解决方案。但在你的情况下,我认为在你的报价单中使用双引号而不是单引号就足够了。@mru是正确的,但我认为一个工作示例会更有帮助:
db2 "export to /tmp/text of DEL select * from SCHEMA.TABLE where COL='STRING' "
这里的重要因素是SQL select没有被引用,只是字符串文本的内容
下面是另一种方法,用于转义与命令行shell不兼容的角色:
db2 export to /tmp/text of DEL select \* from SCHEMA.TABLE where COL=\'STRING\'
我可以使用直接的db2命令,而不是db2导出,但这不会给我csv,我必须在select中的每个字段之间执行类似于“| |”、“| |”的操作来伪造csv。考虑到我想使用任意SQL语句,我不想强制进行这种定制。嗯,没那么漂亮。因此,我想,我必须在我的脚本中加入一个函数,以替换我上一句中提到的所有'with''''''@Alex'实例,或者通过Fred的回答,您只需将语句周围的单引号替换为
“
,比如db2 export to/tmp/text of DEL“select*from SCHEMA.TABLE where COL='STRING'“
这是可行的-但是,我在将其转换为变量以传递到脚本中时遇到了问题。因此,如果我从命令行运行db2,我就没事了。但是,尝试执行db2导出到DEL“$SQL”的/tmp/text这样的操作,$SQL来自SQL=cat query.SQL
我发现它扩展了*。如果我在文件中用*转义,那么查询将失败,因为它不喜欢“谢谢,但是,他先到了”中的*。