1.描述
在使用Oracle存储过程 执行批量插入时 可能遇到插入报错 导致存储过程不执行
2.方法
CREATE OR REPLACE
PROCEDURE 888888 IS
V_DATE VARCHAR2(20);
BEGIN
-- 查询出 需要插入时间的最大值,或者使用 MAX() 函数
SELECT
R.DTIME INTO V_DATE FROM (
SELECT
ST.DTIME
FROM
STSTSTST ST
ORDER BY
ST.DTIME DESC ) R WHERE ROWNUM = 1;
-- 查询 最大时间之后的 所有待插入数据
FOR ROW_DATA IN (SELECT T.DTIME
FROM TSTSTSTS T
WHERE T.CREATETIME > V_DATE
) LOOP
--捕获异常开始
BEGIN
--循环插入 所有的数据
INSERT INTO ISISISIS
(DTIME)
VALUES
(ROW_DATA.DTIME);
--直接提交
COMMIT;
-- 报错 如(违反唯一主键 异常)
EXCEPTION
-- 报异常是进行的操作
WHEN OTHERS THEN
-- null 什么也不做
NULL;
-- 结束异常 执行下一条插入
END;
--结束循环插入
END LOOP;
--结束 存储过程
END 888888;
3.注意
此方法 标识自动忽略 报错这一条数据 如:违反唯一主键 则插入第二条 重复主键 数据 忽略