【发布时间】:2020-10-13 22:22:20
【问题描述】:
基于OutPutType=1,我需要显示2个select语句输出。在下面的代码中,我收到以下错误:(请注意,实际上我在 2 个 select 语句中有 2 个不同的数据集,但在这里作为参考,我写了一个 select 用于时间,另一个语句用于 date)
SQL 错误 [42601]:在“”之后发现了意外的标记“”。预期的标记可能包括:“OM sysibm.sysdummy1'”.. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.21.29
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
【问题讨论】:
-
如果你的过程可以有两个不同的结果集,那么你必须在创建过程时使用
DYNAMIC RESULT SETS 2,如果你只有一个结果集,那么第二个结果集必须产生没有行。这可能被认为是糟糕的设计。 -
@mao 我尝试使用动态结果集 2 但仍然遇到相同的错误
-
您的语法错误是由于您的示例过程在
c_cursor_text1之前缺少SET。修正你的语法。