项目开发之存储过程发生的那些事
2018-09-17 14:02
483 查看
前言
之前在项目开发过程中,需要有一步操作就是使用存储过程删除一系列相关的表,再使用mybatis调用该存储过程,输入参数为家人账号,类型为String,数据库表结构中,该账号字段类型为varchar2,再实操的过程中,没有发生错误,可能是输入参数虽然传入的是String类型,但是该账号内容全部为数字,因为在执行过程中就报“ORA-01722: 无效数字”异常了。
原因分析
输入参数虽然是字符串类型,但是内容均为数字,在执行存储过程字符串拼接时,如果是使用“||”符号进行拼接,那么拼接后的sql是没有单引号的,也就是比如存储过程中某条语句:execu_sql := 'delete from userinfo where account = ' ||account;(execu_sql为在存储过程定义的变量,为varchar(2000),":="为赋值操作,相当于把这条sql赋值给execu_sql这个表变量进行保存),但是执行完成后,execu_sql这个变量内容为:"delete from userinfo where account = XXXXXX",我们知道,把这个sql运行,肯定会报无效数字异常的,因此异常就是这样出现的,因为oracle有隐式转换机制,如果你传入的虽然是String类型的变量,但是如果变量的内容全部都会数字,那么oracle默认会将该String类型变量转化为数字,那么运行时就会报错了。
解决方案
那么我们在实操的过程中就要动态的拼接单引号了,可以使用ASCII 编码,单引号的ASCII 编码我39,那么存储过程sql可以这样写:execu_sql := 'delete from userinfo where account = '||chr(39)||account||chr(39);这样就不会出错了。
相关文章推荐
- .NET 项目开发工具:自动生成分页存储过程
- 一个用CLR写存储过程的项目回顾 (一) 开发过程
- 项目迭代开发手记--文件分割存储用例的实现过程(2)
- 最近项目报表开发中写的存储过程-成绩分段统计
- 最近项目报表开发中写的存储过程-学生综合成绩对比
- 项目迭代开发手记--文件分割存储用例的实现过程(3)
- 用DB2的Java存储过程结合Tomcat连接池开发Web项目
- 数独游戏设计与实现之第三篇——项目开发的过程
- 开发PL/SQl的子程序和包 存储过程和函数
- Oracle开发常用函数与存储过程
- IT整体外包后业务系统从开发项目转入维护项目的过程管理
- JAVA简单项目"购物系统"的整个开发过程详解(内含源码和注释)
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- SQL Server 开发之 分页存储过程
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- 一个Windows Service项目的完整开发过程
- 项目开发过程中自己的总结
- 使用SpringSide 3.1.4.3开发Web项目的全过程(中)
- 项目采用asp.net mvc开发过程中遇到的问题。
- 一次项目开发过程中遇到的问题--错误的表单校验导致我的整个系统宕机