我的动态sql下面改变一个表&根据查询的输出创建列是错误的。
查询:
DECLARE
CURSOR c1 is select distinct WP_NO from temp;
cnum VARCHAR2(255);
BEGIN
FOR cnum in c1
LOOP
EXECUTE IMMEDIATE 'Alter table temp_col add (:1 varchar2(255))' using cnum;
END LOOP;
COMMIT;
END;
错误:
PLS-00457:表达式必须是SQL类型
答案 0 :(得分:4)
这是因为bind variables are not allowed in DDL statements。
考虑在不使用绑定变量的情况下尝试:
DECLARE
CURSOR c1 is select distinct WP_NO from temp;
cnum VARCHAR2(255);
BEGIN
FOR cnum in c1
LOOP
EXECUTE IMMEDIATE 'Alter table temp_col add ('|| cnum ||' varchar2(255))';
END LOOP;
COMMIT;
END;
答案 1 :(得分:-1)
您与 cnum 符号存在冲突,您可以将其用作局部变量和游标的当前行。
你可能想要这个:
DECLARE
CURSOR c1 is select distinct WP_NO from temp;
BEGIN
FOR current_row in c1
LOOP
EXECUTE IMMEDIATE 'Alter table temp_col add (:1 varchar2(255))' using current_row.WP_NO;
END LOOP;
COMMIT;
END;
如您所见,您无需声明在for循环中使用的 current_row 变量。