【发布时间】:2014-10-13 13:29:10
【问题描述】:
我正在尝试参数化存储过程并将参数用作表名。第二部分是添加到返回的数字并将它们分配给另一个变量:
CREATE or replace PROCEDURE TEST
(IN tab1 CHAR(20), IN tab2 CHAR(20), OUT MSG INTEGER)
RESULT SETS 1
LANGUAGE SQL
BEGIN
DECLARE C1 CURSOR WITH RETURN FOR
SELECT count(*)
FROM tab1;
DECLARE C2 CURSOR WITH RETURN FOR
SELECT count(*)
FROM tab2;
OPEN C1;
OPEN C2;
SET MSG= C1 + C2;
CALL DBMS_OUTPUT.PUT_LINE( msg );
END @
问题是,参数没有设置为表名,导致tab1不是已知表的错误。 我不知道添加是否有效,还没有走到那一步,也许你已经看到了一个错误。
我希望你能帮助我,因为这让我发疯。
提前致谢。
流浪汉
【问题讨论】:
-
一个 CURSOR 是在一个特定的表上定义的。为了让 SQL 在 CREATE PROCEDURE 运行时创建游标定义,它需要知道使用了哪个表。创建过程后,不能将游标的表名发送到过程中,因为 SQL 不知道如何定义游标,因此无法创建过程。
标签: sql stored-procedures parameters cursor db2