2012-08-24 49 views
0

我想在每次运行循环时在表中添加一列。我创建了一个临时变量,它将为循环中的每个迭代使用不同的名称。现在我想在我的表中添加一个具有相同名称的列。我想是这样的,部分代码显示在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

什么数据库产品是您使用? – kgrittn

+0

我在oracle数据库上做的 – user1617511

+0

你为什么要这样做?这听起来像一个可怕的模型。您必须使用动态SQL来执行此操作,并且您需要查询这些值。为什么不有一个单独的表来保存值;或者只是加入到'ora_dmstore'中,因为您似乎已经有了'id'值来加入?如果你的目标隐藏了“复杂性”,你可以有这样的观点。 –

回答

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; 
/
+0

如果要在新列中添加的值存储在临时变量中,该怎么办?我会用它作为 更新ABCD b set b.n'|| V_COUNT ||' = || temp_variable || – user1617511

+0

或多或少,你错过了一个报价:'set b.n'|| V_COUNT ||' ='|| temp_variable'并且处理'temp_variable'的类型转换(即日期到char或类似的情况,在这种情况下最好使用绑定变量:'set b.n'|| V_COUNT || =:temp_variable'using temp_variable ' – GWu

相关问题