我目前在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?
答案 0 :(得分:2)
如果您是从命令行运行此命令,Bash会将'
关闭'asm_admin'
,因为它只是假设您正在传递一个字符串。最终结果是SQL成为WHERE name = asm_admin
无效。
要纠正此问题,您需要引用整个命令:
db2 "update USM_USER set STATUS = 1 where NAME = 'asm_admin'"