今天在修改缺陷时遇到一个问题,更新数据库字段时一直报错:ORA-00911。sql脚本如下:
UPDATE MBP_DOC SET CSTATE='200' WHERE CID='123'; UPDATE MBP_DOC SET CSTATE='200' WHERE CID='234'; UPDATE MBP_DOC SET CSTATE='200' WHERE CID='456';
该脚本在数据库中可以执行,但是从程序中去访问数据库修改值时就会报错。
报错的原因在于,更新oracle数据库中的字段时,如果一次执行多条语句,就要将这些语句用 BEGIN END;包起来。如上的脚本应改写为:
BEGIN UPDATE MBP_DOC SET CSTATE='200' WHERE CID='123'; UPDATE MBP_DOC SET CSTATE='200' WHERE CID='234'; UPDATE MBP_DOC SET CSTATE='200' WHERE CID='456'; END;
如果只执行一条update语句
UPDATE MBP_DOC SET CSTATE='200' WHERE CID='123';
这样也是会报ORA-00911错.此时,就应该去掉末尾的分号;
在程序中,操作的最后一句应该是不加分号的。加了反而会报错。只有一条语句时应该去掉分号,如下:
UPDATE MBP_DOC SET CSTATE='200' WHERE CID='456'
总结:1 程序中访问oracle数据库的时候,有以下几种情况,都是正确的:
//1 执行一条语句,不加分号
UPDATE MBP_DOC SET CSTATE='200' WHERE CID='456'
//2 执行一条语句,加分号,加BEGIN END;
BEGIN UPDATE MBP_DOC SET CSTATE='200' WHERE CID='456'; END;
//3 执行多条语句,每句末尾加分号,加BEGIN END
BEGIN UPDATE MBP_DOC SET CSTATE='200' WHERE CID='456'; UPDATE MBP_DOC SET CSTATE='200' WHERE CID='123'; END;
也就是,任何情况下,每一句后面加上分号,然后整个操作用BEGIN END;包起来,都是不会出错的。