Конвертировать Oracle в хранимую процедуру DB2 - PullRequest
0 голосов
/ 26 июня 2018

Я новичок в разработке хранимых процедур, и мне нужно преобразовать существующую хранимую процедуру 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;
/

1 Ответ

0 голосов
/ 26 июня 2018

IBM Database Conversion Workbench поможет вам преобразовать базу данных Oracle в Db2, включая код PL / SQL.https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=05901c97-75b2-47a1-9c32-25f748855913

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...