在 CURSOR 的 FOR 循环中使用 Dynamic SQL
Using a Dynamic SQL in the CURSOR's FOR LOOP
经过几个小时的搜索,我似乎无法找到解决这个简单问题的方法!
CREATE PROCEDURE P()
LANGUAGE SQL
BEGIN ATOMIC
DECLARE fullname CHAR(40);
FOR v AS cur1 CURSOR FOR
SELECT firstnme, midinit, lastname FROM employee
DO
SET fullname = v.lastname || ',' || v.firstnme
||' ' || v.midinit;
INSERT INTO tnames VALUES (fullname);
END FOR;
END
上面的 DB2 存储过程块对 STATIC SQL 使用 FOR 循环,我尝试用动态 SQL 变量替换 SQL 但它不起作用。任何帮助都会很棒。
我知道我们可以使用 OPEN..FETCH..LOOP 块来做同样的事情,但我的要求是为此使用 FOR 循环。
非常感谢:)
费萨尔.
您可以使用一条 INSERT ... SELECT
语句来完成此操作:
INSERT INTO tnames
SELECT lastname || ',' || firstnme ||' ' || midinit
FROM employee;
FOR 是静态编译语句,不允许使用准备好的语句名称代替 SELECT 语句。
您可能想回顾一下您对要求的解释,或者跳出框框思考,从一个全新的角度来处理这个问题。
经过几个小时的搜索,我似乎无法找到解决这个简单问题的方法!
CREATE PROCEDURE P()
LANGUAGE SQL
BEGIN ATOMIC
DECLARE fullname CHAR(40);
FOR v AS cur1 CURSOR FOR
SELECT firstnme, midinit, lastname FROM employee
DO
SET fullname = v.lastname || ',' || v.firstnme
||' ' || v.midinit;
INSERT INTO tnames VALUES (fullname);
END FOR;
END
上面的 DB2 存储过程块对 STATIC SQL 使用 FOR 循环,我尝试用动态 SQL 变量替换 SQL 但它不起作用。任何帮助都会很棒。
我知道我们可以使用 OPEN..FETCH..LOOP 块来做同样的事情,但我的要求是为此使用 FOR 循环。
非常感谢:) 费萨尔.
您可以使用一条 INSERT ... SELECT
语句来完成此操作:
INSERT INTO tnames
SELECT lastname || ',' || firstnme ||' ' || midinit
FROM employee;
FOR 是静态编译语句,不允许使用准备好的语句名称代替 SELECT 语句。
您可能想回顾一下您对要求的解释,或者跳出框框思考,从一个全新的角度来处理这个问题。