Oracle存储过程实现同步表数据,若存在更新,不存在插入
2018-03-28 16:00
537 查看
创建存储过程
CREATE OR REPLACE
PROCEDURE "TEST_PROC"(NAME IN VARCHAR2,DM IN VARCHAR2) IS
ZJ VARCHAR2(40);
JH VARCHAR2(10);
VERRINFO VARCHAR2(200);
USER_COUNT NUMBER;
BEGIN
ZJ:= 'YH0' || TRUNC(100000000000+900000000000*DBMS_RANDOM.VALUE);
SELECT XZQH INTO JH FROM ZF_T_SYS_DWDM WHERE DWDM = DM;
INSERT INTO ZF_T_SYS_YH(ID,XM,JH) VALUES(ZJ,NAME,JH);
FOR I IN (SELECT * FROM ZF_T_SYS_YH) LOOP
SELECT COUNT(1) INTO USER_COUNT FROM APP_USER WHERE JYID = I.ID;
IF USER_COUNT > 0 THEN
UPDATE APP_USER SET USERNAME = I.XM WHERE JYID=I.ID;
ELSE
INSERT INTO APP_USER(ID,JYID,USERNAME) VALUES(TRUNC(100000000000+900000000000*DBMS_RANDOM.VALUE),I.ID,I.XM);
END IF;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQLCODE));
VERRINFO := SUBSTR(SQLERRM, 1, 200);
INSERT INTO ERR(ERRINFO,CREATETIME) VALUES(VERRINFO,SYSDATE);
COMMIT;
END;
END TEST_PROC;调用存储过程
DECLARE
NAME VARCHAR2(20);
DM VARCHAR2(40);
BEGIN
NAME:='姓名';
DM:='000000000000';
TEST_PROC(NAME,DM);
END;PS:Oracle的存储过程创建建议采用PL/SQL工具,Navicat Premium创建存储过程容易出错。(同样的过程在PL/SQL上执行成功,在Navicat Premium上执行报错......)
CREATE OR REPLACE
PROCEDURE "TEST_PROC"(NAME IN VARCHAR2,DM IN VARCHAR2) IS
ZJ VARCHAR2(40);
JH VARCHAR2(10);
VERRINFO VARCHAR2(200);
USER_COUNT NUMBER;
BEGIN
ZJ:= 'YH0' || TRUNC(100000000000+900000000000*DBMS_RANDOM.VALUE);
SELECT XZQH INTO JH FROM ZF_T_SYS_DWDM WHERE DWDM = DM;
INSERT INTO ZF_T_SYS_YH(ID,XM,JH) VALUES(ZJ,NAME,JH);
FOR I IN (SELECT * FROM ZF_T_SYS_YH) LOOP
SELECT COUNT(1) INTO USER_COUNT FROM APP_USER WHERE JYID = I.ID;
IF USER_COUNT > 0 THEN
UPDATE APP_USER SET USERNAME = I.XM WHERE JYID=I.ID;
ELSE
INSERT INTO APP_USER(ID,JYID,USERNAME) VALUES(TRUNC(100000000000+900000000000*DBMS_RANDOM.VALUE),I.ID,I.XM);
END IF;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
BEGIN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQLCODE));
VERRINFO := SUBSTR(SQLERRM, 1, 200);
INSERT INTO ERR(ERRINFO,CREATETIME) VALUES(VERRINFO,SYSDATE);
COMMIT;
END;
END TEST_PROC;调用存储过程
DECLARE
NAME VARCHAR2(20);
DM VARCHAR2(40);
BEGIN
NAME:='姓名';
DM:='000000000000';
TEST_PROC(NAME,DM);
END;PS:Oracle的存储过程创建建议采用PL/SQL工具,Navicat Premium创建存储过程容易出错。(同样的过程在PL/SQL上执行成功,在Navicat Premium上执行报错......)
相关文章推荐
- Oracle实现数据不存在则插入,数据存在则更新(insert or update)
- Oracle实现数据不存在则插入,数据存在则更新(insert or update)
- mysql如何实现插入数据时如果不存在则插入如果存在则更新的操作
- Oracle触发器实现更新一张表数据时判断另一张表是否存在,存在更新数据,不存在插入数据
- 导入数据时,存在时更新,不存在时插入
- oracle mybatis(Mergr into语句带序列)添加数据时如果数据存在就更新,如果不存在就插入
- mysql学习总结一当数据不存在的时候插入,存在的时候进行更新,删除重复数据
- MySQL 记录不存在时插入 记录存在则更新的实现方法
- SSIS处理导入数据时, 存在的更新, 不存在的插入
- mongodb 当数据存在时更新数据,数据不存在时插入数据
- mybatise+oracle添加数据时如果数据存在就更新,如果不存在就插入
- SSIS(SQL Server Integration Service)处理导入数据时, 存在的更新, 不存在的插入
- MySQL 记录不存在时插入 记录存在则更新的实现方法
- 当表中数据不存在即插入,当存在时,即更新
- SSIS处理导入数据时, 存在的更新, 不存在的插入
- 转 SSIS处理导入数据时, 存在的更新, 不存在的插入
- SSIS处理导入数据时, 存在的更新, 不存在的插入
- SSIS处理导入数据时, 存在的更新, 不存在的插入
- mysql 如果数据不存在,则插入新数据,否则更新的实现方法