【发布时间】:2013-06-03 07:29:45
【问题描述】:
当我在我的 oracle SQL Developer 上运行以下过程时
create or replace
Procedure Table_Update
IS
s_id VARCHAR2(256 byte);
CURSOR C1 IS
SELECT A.SR_ID
FROM TABLE_2 B,TABLE_1 A
WHERE A.Primary_key=B.Primary_Key;
BEGIN
loop
open c1;
fetch c1 into s_id;
exit when C1%NOTFOUND ;
update TABLE_2 set SR_ID = s_id;
commit;
END LOOP;
CLOSE C1;
END;
table_1 和 table_2 具有相似的结构。我的要求是 table_1 中的 SR_ID 应该根据匹配的主键更新为 table_2。当我运行该过程时,我收到以下错误消息
Connecting to the database XXX.
ORA-06511: PL/SQL: CURSOR ALREADY OPEN
ORA-06512: at "Table_Update", line 7
ORA-06512: at "Table_Update", line 13
ORA-06512: at line 2
PROCESS EXITED.
Disconnecting from the database XXX.
我一直在尝试这个,请帮助我
谢谢
【问题讨论】:
-
我不是专家,但我认为您在
update声明中缺少where子句。 -
除了 a_horse_with_no_name 的出色答案之外,如果您 以这种方式进行操作,即您有一个 500m 行表并且无法锁定它的全部内容最好使用 BULK COLLECT 并更新 ROWID,因为这样会快得多。
标签: sql oracle stored-procedures