zoukankan      html  css  js  c++  java
  • 使用oracle数据库开发,异常总结

    最近两天使用的oracle数据库开发项目时遇到了2个异常,第一个是执行sql语句时报异常:“ORA-00911: 无效字符”,如下图:

    sql语句如下:

    断点调试,把sql语句拷贝到pl/sql里执行,sql语句执行正常。反复测试几次后,去掉了sql语句结尾的分号,程序执行正常。

    总结到:pl/sql里执行的sql语句可以加分号,但是程序里执行的sql语句字符串结尾不要加分号。

    第二个异常是:

    ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: wrong number or types of arguments in call to 'ADDOPERATIONINFO'
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    

    异常截图如下:

    调用的存储过程如下:

    根据异常提示,应该是说存储过程的参数个数不对或者是存储过程参数类型不对。

    反复对比程序传入的参数个数和类型,与oracle里存储过程的参数个数和类型,是完全一模一样的。困惑了很久后,测试发现,是由于C#程序传入的字符串类型参数entityId是null,存储过程第313行判断p_EntityId is not null 时,插入到ENTITYANDOPERATION表。

    即:程序里传入的是null,但是到数据库里用is not null判断的的结果是true。

    于是我在程序里对entityid进行了判断,当entityid为null时,p_EntityId传入的值为System.DBNull.Value,如下图:

    这样的话,实现了我想要的效果,而不报错:

    当entityid不为null时,存储过程第313行if语句返回true,执行存储过程的第314行插入语句;

    当entityid为null值时,传入的是System.DBNull.Value,存储过程第313行if语句返回false,不执行第314行插入语句。

  • 相关阅读:
    CDZSC_2015寒假新人(1)——基础 D
    CDZSC_2015寒假新人(1)——基础 C
    CDZSC_2015寒假新人(1)——基础 B
    CDZSC_2015寒假新人(1)——基础 A
    Fluent Python: Classmethod vs Staticmethod
    Fluent Python: @property
    Fluent Python: Mutable Types as Parameter Defaults: Bad Idea
    RedHat/CentOS利用iso镜像做本地yum源
    CentOS6 安装VNCserver
    Centos6设置DNS
  • 原文地址:https://www.cnblogs.com/527289276qq/p/5237393.html
Copyright © 2011-2022 走看看