0

我正在尝试运行一个查询,该查询将在其输出中包含静态列。select 语句在我通过 CLP 运行时有效,但在我在 shell 脚本中执行时无效:

su - myid -c 'db2 connect to mydb;db2 -x -v "select COL1,'','',COL2,'','',COL3L from MYTABLE fetch first 10 rows only"; db2 connect reset;'

当我运行它时,我得到的输出错误是:

SQL0104N  An unexpected token "," was found following "select COL1,".
Expected tokens may include:  "<select_sublist>".  SQLSTATE=42601

SQL1024N  A database connection does not exist.  SQLSTATE=08003

我什至尝试将 select 语句放在一个变量中并将其插入到语句中,但仍然是同样的错误。任何帮助将不胜感激。-谢谢

4

1 回答 1

2

您应该将单引号转义为反冲,如下所示:

su - myid -c 'db2 connect to mydb;db2 -x -v "select COL1,\'\',\'\',COL2,\'\',\'\',COL3L from MYTABLE fetch first 10 rows only"; db2 connect reset;'

当心,我没有测试它......刚刚手头没有外壳。

更新:

最后我得到了一个 DB2 实例。经过一些测试后,我得到了它的工作。事实证明,以前的语法是错误的。引用单引号的正确方法是(在这种情况下)'\'',如:

su - myid -c 'db2 connect to mydb;db2 -x -v "select COL1,'\'','\'',COL2,'\'','\'',COL3L  from MYTABLE fetch first 10 rows only"; db2 connect reset;'

这是因为必须关闭整个命令周围的单引号 (') 以便为 db2 查询 (\') 中的单引号提供转义,然后重新打开以恢复命令引用 (')。虽然看起来很奇怪,但它确实有效......

这是我用来测试它的命令:

bash -c 'db2 connect to mydb;db2 -x -v "select 1,'\'','\'',2,'\'','\'',3  from SYSIBM.SYSDUMMY1 fetch first 10 rows only"; db2 connect reset;'
于 2012-12-03T21:11:20.150 回答