【问题标题】:IF SET Help Oracle to DB2IF SET 帮助 Oracle 到 DB2
【发布时间】:2017-12-13 20:08:09
【问题描述】:

我必须将所有过程从 Oracle 迁移到 DB2 数据库。我想知道,当 Oracle 工作时,我如何在 IF 内执行 SET 语法。

在 Oracle 中使用的变量是 ps_iPkCooperativa 并且正在接收 0。

Oracle 代码:

BEGIN
    SELECT CCOOP
      INTO ps_iPkCooperativa
      FROM COOP
    EXCEPTION
        WHEN NO_DATA_FOUND
        THEN  ps_iPkCooperativa := 0;
END; 

我如何在 DB2 中做到这一点?

【问题讨论】:

    标签: stored-procedures db2 sql-pl


    【解决方案1】:

    您可以对 db2 进行这样的转换:

        BEGIN ATOMIC
         DECLARE ps_iPkCooperativa INT;
    
            SELECT CCOOP
              INTO ps_iPkCooperativa
              FROM COOP;         
         SIGNAL SQLSTATE '02000' -- means no_data_found
              SET MESSAGE_TEXT='No Data Found ';
              SET ps_iPkCooperativa = 0;
        END@  
    

    在哪里

    ATOMIC复合语句,顾名思义,可以认为 作为一个单一的整体——如果其中出现任何未处理的错误情况, 到目前为止已执行的所有语句都是 也被认为已经失败,因此被回滚。 ATOMIC 复合语句不能嵌套在其他 ATOMIC 中 复合语句。

    此外,您不能使用 SAVEPOINTs 或发出显式 COMMITs 或 从 ATOMIC 复合语句中回滚。

    注意

    COMMITROLLBACKSAVEPOINTS 和嵌套的 ATOMIC 复合语句是 不允许在 ATOMIC 复合语句中。

    【讨论】:

    • Barbaros Ozhan,我在上面进行了查询,但是当我尝试在 db2 上执行时,显示我无法做到。 SELECT CCOOP INTO ps_iPkCooperativa FROM GPRSD001.COOP; SIGNAL SQLSTATE '02000' SET ps_iPkCooperativa = 0;
    • 告诉我我必须把分号放在'0200'的结尾
    • @Luiz 是的,你是对的,对不起。我已经添加了SET MESSAGE_TEXT='No Data Found '; 部分。
    猜你喜欢
    • 2021-10-06
    • 2011-01-11
    • 2021-02-08
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多