ORA-00911无效字符报错

今天在修改缺陷时遇到一个问题,更新数据库字段时一直报错: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;包起来,都是不会出错的。

posted @ 2013-12-03 20:16  fionhan  阅读(708)  评论(0编辑  收藏  举报