Я новичок в разработке хранимых процедур, и мне нужно преобразовать существующую хранимую процедуру Oracle в синтаксис DB2.Я получил ошибку в части исключения, пожалуйста, помогите мне преобразовать
PS.Я получил ошибку после строки исключения
Процедура Oracle
:CREATE OR REPLACE PROCEDURE a.pUpsertDivision
( error_code OUT VARCHAR2,
error_msg OUT VARCHAR2,
divId IN INTEGER,
divName IN VARCHAR2,
divDesc IN VARCHAR2,
retiredFlag IN INTEGER
)
AS
BEGIN
MERGE INTO a.DIVISION DIV
USING DUAL
ON
(DIV.DIVISION_ID = divId)
WHEN MATCHED THEN UPDATE
SET DIV.DIV_NAME = divName,
DIV.DIV_DESCRIPTION = divDesc,
DIV.RETIRED_FLAG = retiredFlag
WHEN NOT MATCHED THEN
INSERT (DIVISION_ID,DIV_NAME,DIV_DESCRIPTION,RETIRED_FLAG)
VALUES ((SELECT MAX(DIVISION_ID)+1 FROM a.DIVISION),divName,divDesc,retiredFlag);
Commit;
error_code := '1';
EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
error_code := 'ERROR_CHUPSERT';
WHEN OTHERS THEN
error_code := SQLCODE;
error_msg := SUBSTR(SQLERRM,1,1000);
RAISE_APPLICATION_ERROR(-20001, error_msg || ' Found error at pUpsertDivision');
END pUpsertDivision;
/
Я пытаюсь конвертировать в db2, но возникла проблема в части исключения
CREATE OR REPLACE PROCEDURE a.pUpsertDivision
(
OUT error_code VARCHAR(4000),
OUT error_msg VARCHAR(4000),
IN divId INTEGER,
IN divName VARCHAR(4000),
IN divDesc VARCHAR(4000),
IN retiredFlag INTEGER)
)
IS
BEGIN
MERGE INTO a.DIVISION DIV
USING DUAL
ON
(DIV.DIVISION_ID = divId)
WHEN MATCHED THEN UPDATE
SET DIV.DIV_NAME = divName,
DIV.DIV_DESCRIPTION = divDesc,
DIV.RETIRED_FLAG = retiredFlag
WHEN NOT MATCHED THEN
INSERT (DIVISION_ID,DIV_NAME,DIV_DESCRIPTION,RETIRED_FLAG)
VALUES ((SELECT MAX(DIVISION_ID)+1 FROM a.DIVISION),divName,divDesc,retiredFlag);--
Commit;--
**EXCEPTION WHEN DUP_VAL_ON_INDEX THEN
set error_code ='ERROR_CHUPSERT';--
WHEN OTHERS THEN
set error_code= SQLCODE;--
set error_msg = SUBSTR(SYSPROC.SQLERRM,1,1000);--
RAISE_APPLICATION_ERROR(-20001, error_msg || ' Found error at pUpsertDivision');--**
END;
/