将新列添加到现有 table 中并使用 PL/SQL 中游标的值更新它们

Add new columns into an existing table and Update them using values from a cursor in PL/SQL

图片中有一个我有的table和我需要创建的table的例子。

我必须使用 table 测试计算一些值,然后向其中添加一些新列(Id2x 和 Id3x)并使用我计算的值更新这些列。我发现问题在于尝试创建列并对其进行更改。如果我的 table 中已经有 id2x 和 id3x 列,我可以更新 table 只要我注释行 EXECUTE IMMEDIATE 'Alter table Testing add (id2X NUMBER, id3X NUMBER)';

SET SERVEROUTPUT ON
DECLARE
  CURSOR cursorP IS
        SELECT id, (2*id) as id2X, (3*id)as id3X
        FROM Testing
        FOR UPDATE OF id2X, id3X;
BEGIN          
  EXECUTE IMMEDIATE 'Alter table Testing add (id2X NUMBER, id3X NUMBER)';

  FOR line IN cursorP LOOP
    UPDATE Testing 
    SET id2X = line.id2X,
        id3X = line.id3X
    WHERE current of cursorP;
  END LOOP;
END;

错误:

ORA-06550: line 10, column 33:
PL/SQL: ORA-00904: "ID3X": invalid identifier
ORA-06550: line 9, column5:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation

如果只是一次性执行块,只需将更改语句移到块外即可。试试这个

SET SERVEROUTPUT ON
Alter table Testing add (id2X NUMBER, id3X NUMBER);

DECLARE
  CURSOR cursorP IS
        SELECT id, (2*id) as id2X, (3*id)as id3X
        FROM Testing
        FOR UPDATE OF id2X, id3X;
BEGIN          


  FOR line IN cursorP LOOP
    UPDATE Testing 
    SET id2X = line.id2X,
        id3X = line.id3X
    WHERE current of cursorP;
  END LOOP;
END;