【问题标题】:Add new columns into an existing table and Update them using values from a cursor in PL/SQL将新列添加到现有表中并使用 PL/SQL 中游标中的值更新它们
【发布时间】:2015-10-05 00:49:30
【问题描述】:

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

我必须使用表测试计算一些值,然后向其中添加一些新列(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;

错误:

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

【问题讨论】:

  • 您好,我想您忘了说您希望我们帮助您解决什么问题。您在运行此块时遇到任何错误吗?
  • 错误代码是葡萄牙语,这就是为什么我没有在这里发布它,但我尝试翻译它现在就在那里
  • 你打算把这个块变成一个过程吗?还是一次性执行块?
  • 我只需要执行一次上面的脚本
  • 我发现如果我的表中已经有 id2x 和 id3x 列,我可以更新表,只要我注释行 EXECUTE IMMEDIATE 'Alter table Testing add (id2X NUMBER, id3X NUMBER) ';

标签: plsql sql-update cursor alter


【解决方案1】:

如果它只是一个一次性执行块,只需将 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2022-08-05
    • 2021-09-30
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多