将新列添加到现有表中并使用PL / SQL

时间:2015-10-05 00:49:31

标签: plsql sql-update cursor alter

在图片中有一个我拥有的表格和我需要创建的表格的例子。

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

进行评论,我就可以更新表格

Table to be updated using cursor

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;

ERROR:

  

ORA-06550:第10行,第33栏:
      PL / SQL:ORA-00904:“ID3X”:无效的标识符
      ORA-06550:第9行,第5栏:
      PL / SQL:忽略SQL语句
      06550. 00000 - “行%s,列%s:\ n%s”
      *原因:通常是PL / SQL编译

1 个答案:

答案 0 :(得分:3)

如果它只是一次执行块,只需将alter语句移到块外。试试这个

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;