从bash脚本运行db2不起作用?

时间:2015-09-24 15:05:23

标签: sql bash db2

我目前在CentOS上使用bash。安装了DB2并且db2在我的路径上。

我在脚本中有几行应该更新我的db2数据库,但它们不起作用。作为一个最小的再现,我可以在bash命令行中做同样的事情,并得到相同的错误。这是复制:

$ db2 connect to PLT02345 user uni using uni; db2 update USM_USER set STATUS = 1 where NAME = 'asm_admin'

我希望这会将STATUS设置为1,以便PLT02345.USM_USER当前NAME asm_admin中的所有内容。

相反,我收到的错误是"ASM_ADMIN"在其使用的上下文中无效。这是完整的输出:

  Database Connection Information

Database server        = DB2/LINUXX8664 10.1.2
SQL authorization ID   = UNI
Local database alias   = PLT02345

DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0206N  "ASM_ADMIN" is not valid in the context where it is used.
SQLSTATE=42703

我很困惑 - 这是什么让它无效? bash是否会以某种方式破坏命令而不是将所有内容传递给db2?

1 个答案:

答案 0 :(得分:2)

如果您是从命令行运行此命令,Bash会将'关闭'asm_admin',因为它只是假设您正在传递一个字符串。最终结果是SQL成为WHERE name = asm_admin无效。

要纠正此问题,您需要引用整个命令:

db2 "update USM_USER set STATUS = 1 where NAME = 'asm_admin'"