使用oracle数据库开发,异常总结
2016-03-03 09:49
861 查看
最近两天使用的oracle数据库开发项目时遇到了2个异常,第一个是执行sql语句时报异常:“ORA-00911: 无效字符”,如下图:
sql语句如下:
断点调试,把sql语句拷贝到pl/sql里执行,sql语句执行正常。反复测试几次后,去掉了sql语句结尾的分号,程序执行正常。
总结到:pl/sql里执行的sql语句可以加分号,但是程序里执行的sql语句字符串结尾不要加分号。
第二个异常是:
异常截图如下:
调用的存储过程如下:
根据异常提示,应该是说存储过程的参数个数不对或者是存储过程参数类型不对。
反复对比程序传入的参数个数和类型,与oracle里存储过程的参数个数和类型,是完全一模一样的。困惑了很久后,测试发现,是由于C#程序传入的字符串类型参数entityId是null,而存储过程里判断p_EntityId is not null 才插入到ENTITYANDOPERATION表(存储过程第313行)。也就是说程序里传入的是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行插入语句。
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,而存储过程里判断p_EntityId is not null 才插入到ENTITYANDOPERATION表(存储过程第313行)。也就是说程序里传入的是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行插入语句。
相关文章推荐
- Oracle数据库分区技术
- oracle中的exists 和not exists 用法详解
- 关于处理小数点位数的几个oracle函数()
- Oracle11g 重建EM
- ORACLE数据库在导入导出时序列不一致的问题
- oracle下lag和lead分析函数
- linux上安装Oracle 11g R2 标准版 64位
- Hibernate学习篇03——Oracle sequence
- oracle之续day06—demo
- bat脚本采用sqlplus登录oracle并若登录失败不卡住bat脚本的执行流程
- Oracle systemstate dump介绍
- ORACLE 表类型变量使用总结
- 彻底弄懂oracle硬解析、软解析、软软解析
- Mybatis批量增加,删除,更新Oracle
- oracle数据库的导出exp与导入imp
- 从Oracle数据库中查询前几个月数据时需要注意的一些问题
- ORACLE SPATIAL介绍
- jdbc连接oracle的方法
- oracle trunc函数
- oracle的练习