Я получаю следующее сообщение об ошибке при создании процедуры IBM db2

#database #db2 #db2-400 #db2-luw

#База данных #db2 #db2-400 #db2-luw

Вопрос:

Что не так со следующим кодом?

 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]: после » » был обнаружен неожиданный токен «(МЕТКА CHAR (30) , значение VARCHAR (1))». Ожидаемые токены могут включать: «ТАБЛИЦА E @DateType» .. SQLCODE =-104, SQLSTATE = 42601, DRIVER = 4.21.29

Ответ №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')
)
  

редактировать: поскольку это должно быть prodecure, вы можете использовать

    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
  

Комментарии:

1. Мне нужно иметь это внутри хранимой процедуры, чтобы я мог вызвать это в SSRS. Я новичок в db2 и не уверен в синтаксисе.. Я предположил, что это будет похоже на то, что я бы написал на sql server!

2. Спасибо за вашу помощь