Function DB2函数错误

Function DB2函数错误,function,db2,Function,Db2,下面的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 retu

下面的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

我真的搞不懂。如果我删除if和elsif语句,它也不会运行,因此问题不应该存在。

终止字符错误:

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

一个技巧是在行的结尾加上如下注释:

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

应该这样做

我知道,但是我必须迁移的数据库与char一起工作,所以我也必须与它们一起工作。在参数和声明中使用CHAR(1)会给我:在“E returnValue CHAR(1)”之后发现一个意外的标记“)”。您是从命令行运行它吗?函数的终止字符是什么?因为它不能是“;”我正在使用squirrel。我在“END”之后尝试了@and语句。我之前的回答是错误的。DB2接受不带大小的字符(我不知道)。但是,您的问题是终止符字符。我已经在末尾用@进行了测试,它可以工作。您需要在squirrel中将语句终止符指定为@,我认为它正在某个地方进行会话。我将添加另一个解决方案作为可能的答案,尽管第一个语句仍然给我
一个意外的标记“char”,但在下面找到了它“DECLARE returnValue”。预期的标记可能包括:“语句结束”。
第二个函数工作,因为其中没有
BEGIN
语句。