如何在if条件下通过db2中的存储过程显示2条select语句输出
根据OutPutType=1,我需要显示2个select语句输出。在下面的代码中,我得到了以下错误:(请注意,实际上,我在2个select语句中有2个不同的数据集,但为了便于参考,我编写了一个select语句表示时间,另一个语句表示日期) SQL错误[42601]:在“”之后发现意外标记“”。预期的令牌可能包括:“OM sysibm.sysdummy1”。。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.21.29如何在if条件下通过db2中的存储过程显示2条select语句输出,db2,db2-400,db2-luw,Db2,Db2 400,Db2 Luw,根据OutPutType=1,我需要显示2个select语句输出。在下面的代码中,我得到了以下错误:(请注意,实际上,我在2个select语句中有2个不同的数据集,但为了便于参考,我编写了一个select语句表示时间,另一个语句表示日期) SQL错误[42601]:在“”之后发现意外标记“”。预期的令牌可能包括:“OM sysibm.sysdummy1”。。SQLCODE=-104,SQLSTATE=42601,DRIVER=4.21.29 CREATE OR REPLACE PROCEDURE
CREATE OR REPLACE
PROCEDURE Test.Test1 (
IN OutPutType SMALLINT)
DYNAMIC RESULT SETS 2 LANGUAGE SQL SPECIFIC test1
BEGIN
DECLARE v_cursor_text VARCHAR(5000);
DECLARE v_cursor_text1 VARCHAR(5000);
DECLARE C1 CURSOR WITH RETURN FOR Statement1;
DECLARE C2 CURSOR WITH RETURN FOR Statement2;
IF OutPutType = 1 THEN
SET
v_cursor_text = ' SELECT CURRENT_TIME FROM sysibm.sysdummy1';
v_cursor_text1 = 'SELECT CURRENT_DATE FROM sysibm.sysdummy1';
END IF;
PREPARE Statement1
FROM
v_cursor_text;
PREPARE Statement2
FROM
v_cursor_text1;
OPEN c1;
OPEN C2;
END
对于“OutputType=2”,您不会显示两个select语句 您设置的唯一select语句用于“OutputType=1” 另外,您有
动态结果集1
但同时打开两个游标…因此您应该有动态结果集2
您显示的select语句都不需要是动态的,您可以简单地使用
DECLARE C1 cursor for
SELECT CURRENT_TIME FROM sysibm.sysdummy1;
希望你不是真的打算这样得到日期和时间
最后,您应该使用实际的Db2平台来标记问题,而不是Db2-400和Db2 luw。基于输入参数生成SQL语句
DECLARE C1 CURSOR WITH RETURN FOR Statement1;
IF OutPutType = 1 THEN
SET v_cursor_text = ' SELECT CURRENT_TIME FROM sysibm.sysdummy1';
else
set v_cursor_text = 'SELECT CURRENT_DATE FROM sysibm.sysdummy1';
END IF;
PREPARE Statement1
FROM
v_cursor_text ;
Open c1;
语法错误是由于在
v\u cursor\u text1
之前缺少SET
动词造成的
要编译该过程,您的示例应为:
--#SET TERMINATOR @
CREATE OR REPLACE PROCEDURE Test.Test1 ( IN OutPutType SMALLINT)
DYNAMIC RESULT SETS 2
LANGUAGE SQL SPECIFIC test1
BEGIN
DECLARE v_cursor_text VARCHAR(5000);
DECLARE v_cursor_text1 VARCHAR(5000);
DECLARE C1 CURSOR WITH RETURN FOR Statement1;
DECLARE C2 CURSOR WITH RETURN FOR Statement2;
IF OutPutType = 1 THEN
SET v_cursor_text = ' SELECT CURRENT_TIME FROM sysibm.sysdummy1';
set v_cursor_text1 = 'SELECT CURRENT_DATE FROM sysibm.sysdummy1';
END IF;
PREPARE Statement1 FROM v_cursor_text;
PREPARE Statement2 FROM v_cursor_text1;
OPEN c1;
OPEN C2;
END@
嗨,查尔斯,这两个select语句本质上是假的。。。我有两个不同的数据集,我需要显示输出类型=1…hi@satya,当输出类型为1时,我需要显示两个select语句输出。一个是细节输出,另一个是摘要输出。因此,在本例中,我不能在select语句中使用if else。如果您的过程可以有两个不同的结果集,则在创建过程时必须使用
动态结果集2
,如果只有一个结果集,则第二个结果集不得产生任何行。这可能被认为是一个糟糕的设计。@mao我尝试使用动态结果集2,但仍然得到相同的错误您的示例过程中的语法错误结果在c\u cursor\u text1
之前缺少一个set
。修正你的语法。