【问题标题】:I am getting following Error message while creating IBM db2 procedure我在创建 IBM db2 过程时收到以下错误消息
【发布时间】:2020-09-22 15:26:44
【问题描述】:

以下代码有什么问题?

PROCEDURE DATETYPE DYNAMIC RESULT SETS 1 LANGUAGE SQL
BEGIN
DECLARE @DateType TABLE
    ( LABEL CHAR(30) ,
    Value VARCHAR(1) );

DECLARE C CURSOR WITH RETURN FOR;

INSERT
    INTO
        @DateType
    VALUES ('Paid Dates Only',
    'P') INSERT
        INTO
            @DateType
        VALUES('Incurred Dates with Paid',
        'S') SELECT
            *
        FROM
            @DateType;

OPEN C;
END 

我正在使用 db2 并收到以下错误:

SQL 错误 [42601]:在“”之后发现了意外的标记“( LABEL CHAR(30) , Value VARCHAR(1) )”。预期的标记可能包括:“E @DateType TABLE”.. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.21.29

【问题讨论】:

    标签: database db2 db2-400 db2-luw


    【解决方案1】:

    无论是 DB2(db2-400 还是 db2-luw)DECLARE xx TABLE 都不是 DB2 SQL PL 语法

    顺便说一句,如果我理解得很好,您的代码可以替换为视图

    CREATE OR REPLACE VIEW DATETYPE (LABEL, VALUE) as (
        VALUES 
        ('Paid Dates Only', 'P'),
        ('Incurred Dates with Paid', 'S')
    )
    

    编辑:既然它必须是一个程序,那么你可以使用

       CREATE OR REPLACE PROCEDURE DATETYPE ()
         RESULT SETS 1
         LANGUAGE SQL
       BEGIN
           DECLARE DATAS CURSOR WITH RETURN FOR 
                VALUES 
                ('Paid Dates Only', 'P'),
                ('Incurred Dates with Paid', 'S');
           OPEN DATAS;
       END
    

    【讨论】:

    • 我需要在存储过程中包含它,以便我可以在 SSRS 中调用它。我是 db2 的新手,不确定语法。我以为它会像我在 sql server 中写的一样!
    • 感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2016-02-09
    • 2020-06-12
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2012-10-29
    相关资源
    最近更新 更多