我有2个游标,它们具有相互连接的唯一编号,例如Student_ID。
如果在第一个游标中找到相同的Student_ID,我必须从第二个游标中删除它。
我发现了类似的东西但却不明白它是怎么回事:
open c1;
fetch c1 into cnumber;
if c1%notfound then
cnumber := 9999;
else
DELETE FROM courses_tbl
WHERE CURRENT OF c1;
COMMIT;
这是我第一次做Oracle PL / SQL。
答案 0 :(得分:0)
1)第一个例子反映了你的方法。这不错,但最好尽量减少删除语句的数量。
CREATE TABLE so_courses_tbl
(
col VARCHAR2(10)
)
;
-- table so_courses_tbl created.
INSERT INTO so_courses_tbl VALUES(1);
-- 1 rows inserted.
DECLARE
CURSOR c1 IS
SELECT 1
FROM DUAL;
cnumber NUMBER;
BEGIN
OPEN c1;
FETCH c1 INTO cnumber;
CLOSE c1;
DELETE
FROM so_courses_tbl
WHERE col = cnumber;
COMMIT;
END;
-- anonymous block completed
SELECT COUNT(1) FROM so_courses_tbl;
-- 0
2)这就是你可以一步完成的方法。你可以使用变量是WHERE子句,使其更灵活(如果你需要它......)
INSERT INTO so_courses_tbl VALUES('X');
INSERT INTO so_courses_tbl VALUES('X');
INSERT INTO so_courses_tbl VALUES('X');
-- 1 rows inserted.
-- 1 rows inserted.
-- 1 rows inserted.
BEGIN
DELETE
FROM so_courses_tbl c
WHERE EXISTS
(
SELECT 1
FROM DUAL d
WHERE c.col = d.dummy
);
DBMS_OUTPUT.PUT_LINE('Number of deleted rows: ' || SQL%ROWCOUNT);
COMMIT;
END;
-- Number of deleted rows: 3
试一试,让我们知道它是怎么回事。