ORACLE 异常处理问题处理
2018-01-11 13:52
239 查看
在写存储过程中使用了Oracle异常后,发现捕获异常之后,异常下面的语句不被执行了,经过各种海查和调试,最终定位问题并成功解决,需要能个遇到同样问题的小伙伴提供帮助。遇到问题时的写法:
CREATE OR REPLACE PROCEDURE PRO_PEOPLE AS
BEGIN
select per_id into v_per_id from PEOPLE where ID=i_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_per_id := -1;
WHEN OTHERS THEN
v_per_id := -1;
IF v_per_id > -1 THEN
select count(1) into v_count from PEOPLE where ID=v_per_id;
IF v_count < 1 THEN
insert into PEOPLE(ID,CREATE_DATE) VALUES (v_per_id,SYSDATE);
END IF;
END IF;
END;上面的存储过程,一旦捕获以后之后,下面的语句将无法继续执行,那么真正的逻辑是需要执行的,修改后的写法如下:
CREATE OR REPLACE PROCEDURE PRO_PEOPLE AS
BEGIN
BEGIN
select per_id into v_per_id from PEOPLE where ID=i_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_per_id := -1;
WHEN OTHERS THEN
v_per_id := -1;
END;
IF v_per_id > -1 THEN
select count(1) into v_count from PEOPLE where ID=v_per_id;
IF v_count < 1 THEN
insert into PEOPLE(ID,CREATE_DATE) VALUES (v_per_id,SYSDATE);
END IF;
END IF;
END;上面红色的部分加上就达到了预期,也就是说下面的IF块就可以执行了。
CREATE OR REPLACE PROCEDURE PRO_PEOPLE AS
BEGIN
select per_id into v_per_id from PEOPLE where ID=i_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_per_id := -1;
WHEN OTHERS THEN
v_per_id := -1;
IF v_per_id > -1 THEN
select count(1) into v_count from PEOPLE where ID=v_per_id;
IF v_count < 1 THEN
insert into PEOPLE(ID,CREATE_DATE) VALUES (v_per_id,SYSDATE);
END IF;
END IF;
END;上面的存储过程,一旦捕获以后之后,下面的语句将无法继续执行,那么真正的逻辑是需要执行的,修改后的写法如下:
CREATE OR REPLACE PROCEDURE PRO_PEOPLE AS
BEGIN
BEGIN
select per_id into v_per_id from PEOPLE where ID=i_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_per_id := -1;
WHEN OTHERS THEN
v_per_id := -1;
END;
IF v_per_id > -1 THEN
select count(1) into v_count from PEOPLE where ID=v_per_id;
IF v_count < 1 THEN
insert into PEOPLE(ID,CREATE_DATE) VALUES (v_per_id,SYSDATE);
END IF;
END IF;
END;上面红色的部分加上就达到了预期,也就是说下面的IF块就可以执行了。
相关文章推荐
- oracle 常见问题处理
- PHP处理中文字符串中的特殊字符解决Oracle插入报错的问题
- Oracle常见问题,及处理。
- Oracle中关键字列问题处理 ORA-01747
- Oracle推免费数据库XE版(摘-如有版权问题与Inber联系并最快处理)
- Oracle SQL Developer-3.2.20.09.87 Windows 10启动问题处理&配置
- 关于Oracle full outer join 的bug问题分析及处理
- Oracle处理CLOB超过4000入库问题
- 近期处理的oracle问题汇总
- Mybatis处理ORACLE自增的问题(通过触发器)
- ORA-01092: ORACLE 实例终止。强制断开连接 ORA-00704: bootstrap process failure 问题的处理
- Oracle出现字符集问题处理方法
- oracle 编码问题|编码处理|编码设置
- Oracle 12C EM Express配置及问题处理
- 如何处理Oracle中TEMP表空间满的问题
- ODP优化之Oracle事务处理中遇到的问题
- [原著]java或者Js 代码逻辑来处理 突破 oracle sql “IN”长度的极限的问题
- Oracle 主机修改IP地址导致的问题的处理
- 如何处理Oracle客户端查询乱码问题
- oracle 编码问题|编码处理|编码设置