zoukankan      html  css  js  c++  java
  • 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;包起来,都是不会出错的。

  • 相关阅读:
    单例模式
    关于static
    在O(1)时间复杂度删除链表节点
    奇偶分割数组
    用栈实现队列
    前序遍历和中序遍历树构造二叉树
    扇贝每日一句_1006
    寻找旋转排序数组中的最小值
    翻转链表
    扇贝每日一句_1002
  • 原文地址:https://www.cnblogs.com/hanpanpan/p/3456436.html
Copyright © 2011-2022 走看看