我想在每次运行循环时在表中添加一列。我创建了一个临时变量,它将为循环中的每个迭代采用不同的名称。现在我想在我的表中添加一个具有相同名称的列。我试过这样的事情,部分代码显示在oracle sql developer:
DECLARE V_COUNT VARCHAR (10) := ZIP_COD
BEGIN
ALTER TABLE ABCD
ADD V_COUNT varchar(10);
update ABCD b
set b.V_COUNT = (select d.ZIP_cod
from ORA_DMSTORE d
where b.id_dmstore = d.id_dmstore);
END;
这显示错误"通常是PL / SQL编译错误。" 我不知道如何摆脱它。请帮忙
答案 0 :(得分:1)
首先,您无法在PL / SQL中执行ALTER TABLE ..
,您必须使用dbms_sql
或execute immediate
:
列名不能以数字开头,因此在我的示例中需要某种前缀n
。
所以一种可能的解决方案是:
DECLARE
V_COUNT VARCHAR (10) := ZIP_COD;
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE ABCD ADD (n'||V_COUNT||' varchar(10))';
EXECUTE IMMEDIATE '
update ABCD b
set b.n'||V_COUNT||' = (select d.ZIP_cod
from ORA_DMSTORE d
where b.id_dmstore = d.id_dmstore)
';
END;
/