Oracle 如何使用存储在临时变量中的名称在表中添加列
我想在每次运行循环时在表中添加一列。我创建了一个临时变量,该变量将为循环中的每个迭代使用不同的名称。现在我想在我的表中添加一个同名的列。我尝试过类似的方法,部分代码显示在oracle sql developer中: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
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