--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;
/
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;
/