0
マイストア手順は以下の通りです:Oracleのストアドプロシージャ、エラーをキャッチERRNO = 32152
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;
は1ケースを除いて、原則的にも作品:ネストされたSELECTステートメントは、発信者が戻って取得する「ゼロ行を返す」場合「[ERRNO = 32152、oramsgの= ORA-32152:NULLの数に操作を実行できません]」
私はこれがOUT_DB_ID = nullではないWHERE SELECT文が行を返さないという事実によるものであることを推測します有効です。
1つの方法は、アプリケーションコードで例外32152をキャッチすることですが、何とかこの手順でこれを実行できるかどうかは疑問でした。