Oracle 如何使用存储在临时变量中的名称在表中添加列

Oracle 如何使用存储在临时变量中的名称在表中添加列,oracle,loops,plsql,alter-table,temporary,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

我想在每次运行循环时在表中添加一列。我创建了一个临时变量,该变量将为循环中的每个迭代使用不同的名称。现在我想在我的表中添加一个同名的列。我尝试过类似的方法,部分代码显示在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编译错误”
我不知道如何摆脱它。请帮助

首先,您不能在PL/SQL中执行
ALTER TABLE..
,您必须使用
dbms\u SQL
立即执行

而且列名不能以数字开头,所以在我的示例中需要某种前缀,
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;
/

您正在使用什么数据库产品?我正在oracle数据库上执行此操作。您为什么要执行此操作?这听起来像一个可怕的模型。您必须使用动态SQL来实现这一点,并且需要在任何时候查询这些值。为什么没有一个单独的表格来保存这些值;或者直接加入
ora_dmstore
,因为您似乎已经拥有了要加入的
id
值?如果您的目标是隐藏“复杂性”,那么您可能有一个视图来执行此操作。如果要在新列中添加的值存储在临时变量中,该怎么办?我是否将其用作更新ABCD b set b.n'| V|u COUNT | | |'=| | temp| u variable | |或多或少,您缺少了一个引号:
set b.n'| V|u COUNT |'='| temp| u variable
并注意
temp|u variable
(即日期到字符或类似。在这种情况下,最好使用绑定变量:
set b.n'| | V| u COUNT | |=:temp_variable'使用temp_variable