将新列添加到现有表中并使用 PL/SQL 中游标中的值更新它们
Posted
技术标签:
【中文标题】将新列添加到现有表中并使用 PL/SQL 中游标中的值更新它们【英文标题】:Add new columns into an existing table and Update them using values from a cursor in 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) '; 【参考方案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;
【讨论】:
以上是关于将新列添加到现有表中并使用 PL/SQL 中游标中的值更新它们的主要内容,如果未能解决你的问题,请参考以下文章
sql [ALTER TABLE ADD COLUMN]将新列添加到现有表#SQL