批量插入存储过程

--insert前判断
CREATE OR REPLACE PROCEDURE TEST
(
P_HCODE_BEGIN IN VARCHAR2, -- HCODE起始值
P_HCODE_END IN VARCHAR2, -- HCODE结束值
P_CREATE_BY IN VARCHAR2, -- 创建者
P_FLAG OUT NUMBER, -- 处理执行标志 0:失败 1:成功
P_MSG OUT VARCHAR2 -- 处理后的信息
) IS
V_HCODE_BEGIN NUMBER(8,0); -- HCODE起始值
V_HCODE_END NUMBER(8,0); -- HCODE结束值
V_COUNT NUMBER; -- 记录条数
V_NOTEXIST_COUNT NUMBER; -- 不存在的条数
BEGIN
-- 变量初始化
P_FLAG := 1;
P_MSG := '';
V_NOTEXIST_COUNT := 0;

V_HCODE_BEGIN := TO_NUMBER(P_HCODE_BEGIN);
V_HCODE_END := TO_NUMBER(P_HCODE_END);

-- 判断起始值是否大于结束值
IF V_HCODE_BEGIN > V_HCODE_END THEN
P_FLAG := 0;
P_MSG := '起始值不能大于结束值';
RETURN;
END IF;

-- 批处理
FOR I IN V_HCODE_BEGIN..V_HCODE_END LOOP
-- 判断该HCODE是否已经存在
SELECT COUNT(HCODE_VALUE) INTO V_COUNT
FROM TP_CDMA_RESOURCE
WHERE TO_NUMBER(HCODE_VALUE) = I;

-- 存在的场合,插入该条记录
IF V_COUNT = 0 THEN

INSERT INTO TP_CDMA_RESOURCE
(
ROW_ID,
HCODE_VALUE,
CREATE_DATE,
CREATE_BY,
LAST_MODIFY_DATE,
LAST_MODIFY_BY
) VALUES (
F_GET_GLOBALID,
TO_CHAR(I),
SYSDATE,
P_CREATE_BY,
SYSDATE,
P_CREATE_BY
);

-- 不存在数加1
V_NOTEXIST_COUNT := V_NOTEXIST_COUNT + 1;

END IF;
END LOOP;

-- 不存在数为0的场合(即全部存在的场合)
IF V_NOTEXIST_COUNT = 0 THEN
P_MSG := '全部已经存在';
END IF;

-- 提交事务
COMMIT;

EXCEPTION WHEN OTHERS THEN
-- 异常的场合,回滚事务
ROLLBACK;

-- 返回异常标志和消息
P_FLAG := 0;
P_MSG := SQLERRM;
END TEST;
/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值