#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. Спасибо за вашу помощь