在图片中有一个我拥有的表格和我需要创建的表格的例子。
我必须使用测试表计算一些值,然后向其添加一些新列(Id2x和Id3x)并使用我计算的值更新这些列。我发现问题在于尝试创建列并更改它。如果我的表中已经有了id2x和id3x列,只要我对行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;
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编译
答案 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;