如何在表中添加一个名称存储在临时变量中的列

时间:2012-08-24 11:32:51

标签: oracle loops plsql alter-table temporary

我想在每次运行循环时在表中添加一列。我创建了一个临时变量,它将为循环中的每个迭代采用不同的名称。现在我想在我的表中添加一个具有相同名称的列。我试过这样的事情,部分代码显示在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编译错误。" 我不知道如何摆脱它。请帮忙

1 个答案:

答案 0 :(得分:1)

首先,您无法在PL / SQL中执行ALTER TABLE ..,您必须使用dbms_sqlexecute 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;
/