DB2功能错误(DB2 function error)

2019-10-20 11:24发布

有什么不对下列DB2功能?

CREATE FUNCTION MIGRATION.determineToTaxService
(DIGI_NAAR_VLG CHAR, DIGI_VAN_VLG CHAR, NAARVLG CHAR)
RETURNS CHAR
BEGIN ATOMIC
    DECLARE returnValue CHAR;
    SET returnValue = '0';

    IF (DIGI_NAAR_VLG = '1') THEN
        SET returnValue = '1';

    ELSEIF (DIGI_VAN_VLG = '1') THEN
        SET returnValue = '1';

    ELSEIF (NAARVLG = '1') THEN
        SET returnValue = '1';
    END IF;

    RETURN returnValue;
END;

我得到这个错误:

An unexpected token "CHAR" was found following " DECLARE returnValue".  Expected tokens may   include:  "END-OF-STATEMENT". SQL Code: -104, SQL State: 42601
Error occured in:
CREATE FUNCTION MIGRATION.determineToTaxService
   (DIGI_NAAR_VLG CHAR, DIGI_VAN_VLG CHAR,
    NAARVLG CHAR)
RETURNS CHAR
BEGIN ATOMIC
    DECLARE returnValue CHAR

我真的不能弄明白。 它如果我删除了,如果和ELSIF语句,这样的问题不应该在那里也没有运行。

Answer 1:

终止字符是错误的:

CREATE FUNCTION MIGRATION.determineToTaxService
(DIGI_NAAR_VLG CHAR, DIGI_VAN_VLG CHAR, NAARVLG CHAR)
RETURNS CHAR
BEGIN ATOMIC
    DECLARE returnValue CHAR;
    SET returnValue = '0';

    IF (DIGI_NAAR_VLG = '1') THEN
        SET returnValue = '1';

    ELSEIF (DIGI_VAN_VLG = '1') THEN
        SET returnValue = '1';

    ELSEIF (NAARVLG = '1') THEN
        SET returnValue = '1';
    END IF;

    RETURN returnValue;
END @

您可以从命令行调用它:

db2 -td@ -vf test


Answer 2:

一个小窍门是,以结束与像注释行:

CREATE FUNCTION MIGRATION.determineToTaxService
    (DIGI_NAAR_VLG CHAR, DIGI_VAN_VLG CHAR, NAARVLG CHAR)
RETURNS CHAR
BEGIN ATOMIC
    DECLARE returnValue CHAR; --
    SET returnValue = '0'; --

    IF (DIGI_NAAR_VLG = '1') THEN
        SET returnValue = '1'; --

    ELSEIF (DIGI_VAN_VLG = '1') THEN
        SET returnValue = '1'; --

    ELSEIF (NAARVLG = '1') THEN
        SET returnValue = '1'; --
    END IF; --

    RETURN returnValue; --
END ;

然后你就可以继续使用; 作为语句终止

您可能要简化功能,是这样的:

CREATE FUNCTION MIGRATION.determineToTaxService
    (DIGI_NAAR_VLG CHAR, DIGI_VAN_VLG CHAR, NAARVLG CHAR)
RETURNS CHAR
RETURN
    CASE WHEN DIGI_NAAR_VLG = '1' THEN '1'
         WHEN DIGI_VAN_VLG = '1' THEN '1'
         WHEN NAARVLG = '1' THEN '1'
         ELSE '0'
    END

应该做



文章来源: DB2 function error
标签: function db2