DB2函数异常

1rhkuytd  于 2023-01-09  发布在  DB2
关注(0)|答案(1)|浏览(244)

我正在把Oracle的plsql函数转换成DB2的plsql函数,下面我提到了Oracle和DB2查询的结构。

CREATE FUNCTION FUNCTION_NAME (IN PARAMETER1 DATATYPE)
                    Return varchar(4000) IS
                    N_COLUMN1 varchar(1);
                    N_COLUMN2 INT;
                    N_COLUMN3 VARCHAR(2000);
                    BEGIN 
                    SELECT A.COLUMN1,A.COLUMN2 INTO N_COLUMN1,N_COLUMN2 FROM TABLE A WHERE A.COLUMN1=PARAMETER1;
                    IF N_COLUMN1 = 'A' then  N_COLUMN3:= 'NEW_A';
                    ELSEIF N_COLUMN1 = 'B' then  N_COLUMN3:= 'NEW_B';
                    END IF;
                    exception when others then N_COLUMN3:= 'OTHERS'
                    RETURN N_COLUMN3;
                    END;
/

DB2查询:

CREATE FUNCTION FUNCTION_NAME (IN PARAMETER1 DATATYPE)
                    Returns varchar(4000)
                    BEGIN 
                    declare N_COLUMN1 varchar(1);
                    declare N_COLUMN2 INT;
                    declare N_COLUMN3 VARCHAR(2000);
                    SELECT A.COLUMN1,A.COLUMN2 INTO N_COLUMN1,N_COLUMN2 FROM TABLE A WHERE A.COLUMN1=PARAMETER1;
                    IF N_COLUMN1 = 'A' then set N_COLUMN3= 'NEW_A';
                    ELSEIF N_COLUMN1 = 'B' then  set N_COLUMN3= 'NEW_B';
                    END IF;
                    exception when others then set N_COLUMN3= 'OTHERS'
                    RETURN N_COLUMN3;
                END;

我在异常部分得到错误。我在互联网上搜索,我得到了DECLARE类型HANDLER FOR SQLEXCEPTION他们提供了这个语法,并且在执行部分需要声明这个之前提到。我不确定我需要用什么词来代替类型。有人能帮助我吗?当其他人**时,**异常的等价DB2语法是什么?

eeq64g8w

eeq64g8w1#

这取决于调用处理程序后要在代码中传递控件的位置。
查看处理程序声明描述。
以下是功能代码的一个可能示例。

CREATE FUNCTION FUNCTION_NAME 
(
  IN PARAMETER1 VARCHAR (1)
)
Returns varchar(4000)
BEGIN
  declare N_COLUMN1 varchar(1);
  declare N_COLUMN2 INT;
  declare N_COLUMN3 VARCHAR(2000);
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
      -- The last statement executed in the function 
      -- when the handler fires.
      -- The control is passed out of the function body
      -- since the handler is declared 
      -- in the main BEGIN END function block.
      RETURN 'OTHERS';
    END;
  
  SELECT A.COLUMN1,A.COLUMN2 
  INTO N_COLUMN1,N_COLUMN2 
  FROM 
  --TABLE A 
  (
    VALUES
      ('A', 0)
    , ('A', 0)
    , ('B', 0)
  ) A (COLUMN1, COLUMN2)
  WHERE A.COLUMN1=PARAMETER1;
  IF N_COLUMN1 = 'A' then 
    set N_COLUMN3 = 'NEW_A';
  ELSEIF N_COLUMN1 = 'B' then
    set N_COLUMN3 = 'NEW_B';
  END IF;
  --exception when others then set N_COLUMN3= 'OTHERS'
  RETURN N_COLUMN3;
END
SELECT P, FUNCTION_NAME (P) AS F
FROM (VALUES 'A', 'B') T (P)

| P级|F级|
| - ------|- ------|
| A类|其他|
| B|新_B|
fiddle

相关问题