【发布时间】:2018-07-18 13:50:25
【问题描述】:
DECLARE
ins NUMBER := 0;
upd NUMBER := 0;
CURSOR c1 IS
SELECT cid
FROM tbl_cust
WHERE cid
IN ('1','2','3','4');
BEGIN
FOR rec IN c1 LOOP
INSERT INTO tbl2 (id_tbl2, name_tbl2)
VALUES(rec.cid, DECODE(rec.cid, '1', 'A',
'2', 'B',
'3', 'C',
'4', 'D'));
ins := ins + 1;
END LOOP;
dbms_output.put_line('Updated: ' || ins);
dbms_output.put_line('Inserted: ' || upd);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
FOR rec IN c1 LOOP
UPDATE tbl2 set name_tbl2 = DECODE(rec.cid, '1', 'A',
'2', 'B',
'3', 'C',
'4', 'D')
WHERE cust_cust_code = rec.cid;
upd := upd + 1;
END LOOP;
dbms_output.put_line('Updated: ' || upd);
dbms_output.put_line('Inserted: ' || ins);
END;
第一次运行此代码时,tbl_cust 中没有与 tbl2 相同的值,输出如下:
更新:0
已插入:4
这是正确的。在第二次运行中,输出是这样的:
更新:4
已插入:0
这也是正确的。 但是当我从数据库中删除例如 cid '1' 和 '3' 时,结果是这样的:
更新:4
已插入:2
删除cid '1'和'3'后我想要的输出是这样的:
更新:2
已插入:2
【问题讨论】:
标签: plsql oracle11g plsqldeveloper