我必须将所有过程从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中执行此操作?
你可以进行这样的转换到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复合语句中。
此外,您不能在ATOMIC复合语句中使用SAVEPOINT或发出显式COMMIT或ROLLBACK。
注意
ATOMIC复合语句中不允许使用COMMIT,ROLLBACK,SAVEPOINTS和嵌套的ATOMIC复合语句。