为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:cos7
【CPU】:x86
【问题描述】*:
EXECUTE IMMEDIATE相当于每次去执行,SQL不完整肯定会报错的,EXECUTE IMMEDIATE后面跟完整的语句,此外'''||i||'''使用这样的方式进行转义,两个连续单引号转义成单引号
可以改成这样:
declare
sql_str1 varchar(400);
sql_str2 varchar(3000);
sql_str3 varchar(4000);
BEGIN
fOR i IN 1..2
LOOP
sql_str1= 'CREATE TABLE Table_' || i ||'(';
-- print sql_str1;
sql_str2:='';
fOR j IN 1..100
LOOP
sql_str2:=sql_str2||'Column_'||j||' VARCHAR2(32),';
--print sql_str2;
END LOOP;
sql_str3:=sql_str1||sql_str2;
sql_str3:=substr(sql_str3,1, length(sql_str3) -1);
sql_str3:=sql_str3||');';
execute IMMEDIATE sql_str3;
END LOOP;
END;
整体逻辑是有问题的,你这样创建表的SQL是不能拼接到一起的,每次都是执行部分SQL,肯定会失败的