【发布时间】:2020-11-10 22:10:58
【问题描述】:
我有 2 个游标,一个用于从 50 列和 10,000 + 数据的表中获取记录,另一个用于检查另一个大表(200 万数据)中是否存在特定列。我应该将光标 1 中的所有记录写入文件一年,如果该列存在于光标 2 中,那么我应该打印一条存在的错误消息,而不是删除它们。如果它不存在,那么我应该删除该行并将其写入与删除记录相同的文件和消息中。 我使用了嵌套游标,性能太差了,因为它每次都在处理从游标 1 到游标 2 的每一行。
CURSOR cursor1
IS
select a.* ,a.rowid
FROM table1 a
WHERE a.table1.year = p_year;
CURSOR check_c2(lv_cd )
IS
Select DISTINCT 'Y'
from table2
where table2 ='R'
AND table2.year= p_year
and table2_code= lv_cd ;
BEGIN :
FOR r in cursor1 LOOP
EXIT WHEN cursor1%NOTFOUND;
OPEN check_c2(r.cd);
FETCH check_c2 INTO lv_check;
IF check_c2%NOTFOUND THEN
lv_check :='N';
END IF;
CLOSE check_c2;
IF lv_check ='Y' THEN
lv_msg =(r.col1,r.col2....r.col50, R code exists do not delete)
utl_file.put_line(lv_log_file, lv_msg, autoflush=>TRUE);
ELSE
DELETE from table1 where rowid= r.rowid
lv_msg =(r.col1,r.col2....r.col50, delete row)
utl_file.put_line(lv_log_file, lv_msg, autoflush=>TRUE);
END IF;
END LOOP;
【问题讨论】:
标签: sql oracle performance plsql cursor