为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:WINDOWS
【CPU】:X86
【问题描述】*:DM8中forall语句执行动态sql报错,是不支持动态sql还是什么原因呢?,具体报错如下图所示:
forall
的写法有问题,正确的写法应该是:
create or replace procedure pro1 IS
TYPE num_list IS TABLE OF NUMBER; -- 定义一个数字列表类型
v_nums num_list := num_list(8, 9); -- 创建一个包含8和9的数字列表
v_sql CLOB := 'INSERT INTO ttt1(name) VALUES(:1)'; -- 动态SQL语句
begin
FORALL i IN v_nums.FIRST .. v_nums.LAST
EXECUTE IMMEDIATE v_sql USING v_nums(i); -- 假设name是字符串类型,因此使用TO_CHAR
commit;
end pro1;
-- call PRO1()
这里的确使用for循环就好了
直接用for循环是可以的
CREATE OR REPLACE PROCEDURE PRO_TEST_V_SQL2 IS
V_SQL CLOB;
V_TIME VARCHAR2(14);
BEGIN
V_SQL := 'INSERT INTO test_123(a) VALUES (:1)';
FOR j IN 0..9 LOOP
EXECUTE IMMEDIATE V_SQL USING j;
END LOOP;
COMMIT;
END PRO_TEST_V_SQL2;