【问题标题】:Convert Oracle to DB2 stored procedure将 Oracle 转换为 DB2 存储过程
【发布时间】:2018-06-26 03:20:03
【问题描述】:

我是存储过程开发的新手,我需要将现有的 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;
/

【问题讨论】:

  • 您在过程中混合了 PL/SQL (Oracle) 和 SQL PL (Db2) 语法。选择一个并坚持下去(注意,如果你想使用 PL/SQL,你需要启用 Oracle 兼容性)。

标签: oracle stored-procedures db2


【解决方案1】:

IBM Database Conversion Workbench 将帮助您将 Oracle 数据库转换为 Db2,包括 PL/SQL 代码。 https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=05901c97-75b2-47a1-9c32-25f748855913

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 2021-08-17
    • 1970-01-01
    • 2022-07-06
    • 2018-03-25
    • 2020-09-28
    • 2018-05-06
    • 2020-10-12
    相关资源
    最近更新 更多