我有两个要比较的游标。如果游标 1 存在于游标 2 的所有行中,我会比较游标 1。我尝试了以下操作,但似乎在第一次匹配时就停止了。
CURSOR cursor1 IS
SELECT col1, col2 FROM table1;
CURSOR cursor2 IS
SELECT col1, col3 FROM table2;
c1_rec cursor1%ROWTYPE;
c2_rec cursor2%ROWTYPE;
BEGIN
OPEN cursor1;
OPEN cursor2;
LOOP
FETCH cursor1 INTO c1_rec;
FETCH cursor2 INTO c2_rec;
EXIT WHEN cursor1%NOTFOUND OR cursor2%NOTFOUND;
IF c1_rec.col1 = c2_rec.col1 OR c1_rec.col2 = c2_rec.col3 THEN
DBMS_OUTPUT.PUT_LINE('Match in row: ' || SQL%ROWCOUNT);
END IF;
END LOOP;
CLOSE cursor1;
CLOSE cursor2;
END;
/
我认为您的逻辑可能不正确。如果游标 2 的所有行中都存在游标 1,您的循环将不会比较游标 1。它只比较游标 2 的一行,然后移动到两个游标的下一行。我认为您想要一个循环内的循环。
这将完成您所描述的内容:
但是,我必须警告你,对于大于 1000 行的数据,这将导致糟糕的性能。通过执行 JOIN,你可以获得更好的性能。
例子:
数据库将在几毫秒内完成这样的查询,即使对于数百万行。