【发布时间】:2017-12-15 00:54:19
【问题描述】:
我的存储过程如下:
create or replace PROCEDURE "FIND_AND_DOSOMETHING"
(
IN_PARAM1 IN MYTABLE.PARAM1_ID%TYPE,
IN_PARAM2 IN MYTABLE.PARAM2_ID%TYPE,
OUT_PARAM OUT MYTABLE.OUT_DB_ID%TYPE
)
AS
BEGIN
UPDATE
MYTABLE SET FLAG=1, PARAM1_ID=IN_PARAM1 ,TIMESTAMP = (TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF PM'))
WHERE OUT_DB_ID = (SELECT OUT_DB_ID FROM MYTABLE WHERE PARAM2_ID=IN_PARAM2 AND FLAG=0 AND ROWNUM = 1)
AND FLAG=0 RETURNING OUT_DB_ID INTO OUT_PARAM;
-- COMMIT OUTSIDE
END FIND_AND_DOSOMETHING;
原则上效果很好,除了一种情况:如果嵌套选择语句“返回零行”调用者返回 "[Errno=32152,OraMsg=ORA-32152: 无法对空数执行操作]"
我猜这是因为 select 语句不返回行 WHERE OUT_DB_ID = null 无效。
一种方法是在应用程序代码中捕获异常 32152,但是我想知道这是否可以在过程中以某种方式完成。
【问题讨论】: