CREATE OR REPLACE PROCEDURE NRMS_TB.P_TB_YYS IS
M_CNT NUMBER(1);
V_CNT NUMBER(2);
V_CITYCODE VARCHAR2(5);
V_FIELDS VARCHAR2(1000);
V_SQL VARCHAR2(1000);
V_OLDID VARCHAR2(100);
--同步库少的或不一样的
CURSOR CR_LESS IS
SELECT OBJECT_RDN, SYS_ID, SYS_NAME, EMS_ID, EMS, SYS_TYPE, SYS_LEVEL, SYS_TOPO, SYS_RATE, SYS_CHANNEL_NUM,SPACE_ID,SPACE_NAME FROM NRMS_JK.CS_TRANSMISSIONSYS
MINUS
SELECT OBJECT_RDN, SYS_ID, SYS_NAME, EMS_ID, EMS, SYS_TYPE, SYS_LEVEL, SYS_TOPO, SYS_RATE, SYS_CHANNEL_NUM,SPACE_ID,SPACE_NAME FROM CS_TRANSMISSIONSYS ;
--同步库L多的
CURSOR CR_V_MORE IS
SELECT SYS_ID,SYS_TYPE FROM CS_TRANSMISSIONSYS
MINUS
SELECT SYS_ID,SYS_TYPE FROM NRMS_JK.CS_TRANSMISSIONSYS;
BEGIN
UPDATE NRMS_JK.CS_TRANSMISSIONSYS SET SYS_LEVEL=CASE
WHEN SYS_LEVEL='1' THEN '221'
WHEN SYS_LEVEL IN('2','3') THEN '222'
WHEN SYS_LEVEL='4' THEN '223'
WHEN SYS_LEVEL='5' THEN '224'
WHEN SYS_LEVEL='6' THEN '225'
ELSE SYS_LEVEL END;
UPDATE NRMS_JK.CS_TRANSMISSIONSYS SET SYS_TOPO=CASE
WHEN SYS_TOPO='1' THEN '1058'
WHEN SYS_TOPO='2' THEN '1062'
ELSE SYS_TOPO END;
COMMIT;
FOR C1 IN CR_LESS LOOP
UPDATE CS_TRANSMISSIONSYS SET
OBJECT_RDN= C1.OBJECT_RDN,
SYS_NAME= C1.SYS_NAME ,
EMS_ID= C1.EMS_ID ,
EMS= C1.EMS ,
SYS_TYPE= C1.SYS_TYPE ,
SYS_LEVEL= C1.SYS_LEVEL,
SYS_TOPO= C1.SYS_TOPO,
SYS_RATE= C1.SYS_RATE,
SYS_CHANNEL_NUM= C1.SYS_CHANNEL_NUM
WHERE SYS_ID=C1.SYS_ID;
M_CNT := SQL%ROWCOUNT;
--没有有这个记录
BEGIN
SELECT FIELDS INTO V_FIELDS FROM SYS_TB_CONFIG WHERE TYPE = 'TransSystem';
SELECT NRMS_JK.F_REGIONID2CODE(C1.SPACE_ID) INTO V_CITYCODE FROM DUAL;
IF M_CNT = 0 THEN
SELECT COUNT(*) INTO V_CNT FROM CS_TRANSMISSIONSYS WHERE SYS_NAME=C1.SYS_NAME;
IF V_CNT>0 THEN
SELECT SYS_ID INTO V_OLDID FROM CS_TRANSMISSIONSYS WHERE SYS_NAME = C1.SYS_NAME;
V_SQL:='UPDATE CS_TRANSMISSIONSYS SET ('||V_FIELDS||') = (SELECT * FROM NRMS_JK.CS_TRANSMISSIONSYS WHERE SYS_ID=:1) WHERE SYS_NAME=:2';
EXECUTE IMMEDIATE V_SQL USING C1.SYS_ID,C1.SYS_NAME;
P_REFRESH_RES(C1.SYS_TYPE||'_SYS',0,V_OLDID,C1.SYS_ID);
ELSE
V_SQL:='INSERT INTO CS_TRANSMISSIONSYS ('||V_FIELDS||') SELECT * FROM NRMS_JK.CS_TRANSMISSIONSYS WHERE SYS_ID = :1';
EXECUTE IMMEDIATE V_SQL USING C1.SYS_ID;
UPDATE CS_TRANSMISSIONSYS A SET CITY_CODE = V_CITYCODE WHERE SYS_ID=C1.SYS_ID;
UPDATE NRMS.S_TRANSMISSIONSYS A SET CITY_CODE = V_CITYCODE WHERE ZRESID=C1.SYS_ID;
END IF;
ELSE--有这一条,但是字段属性不一样
--其他正式库表的处理,写这里
V_SQL:='UPDATE CS_TRANSMISSIONSYS SET ('||V_FIELDS||') = (SELECT * FROM NRMS_JK.CS_TRANSMISSIONSYS WHERE SYS_ID=:1) WHERE SYS_ID=:2';
EXECUTE IMMEDIATE V_SQL USING C1.SYS_ID,C1.SYS_ID;
P_REFRESH_RES(C1.SYS_TYPE||'_SYS',1,C1.SYS_ID,C1.SYS_ID);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
P_CS_ERROR(C1.SYS_TYPE||'_SYS',C1.SYS_ID,SQLERRM,'CS');
END;
END LOOP;
--查出来,本地库比接口多的
FOR C1 IN CR_V_MORE LOOP
BEGIN
SELECT CITY_CODE INTO V_CITYCODE FROM CS_TRANSMISSIONSYS WHERE SYS_ID=C1.SYS_ID;
DELETE FROM CS_TRANSMISSIONSYS WHERE SYS_ID=C1.SYS_ID;
P_DEL_RES(C1.SYS_ID, 'S_TRANSMISSIONSYS', C1.SYS_TYPE||'_SYS');
EXCEPTION
WHEN OTHERS THEN
P_CS_ERROR(C1.SYS_TYPE||'_SYS',C1.SYS_ID,SQLERRM,'CS');
END;
END LOOP;
COMMIT;
BEGIN
NRMS.P_AUTO_TB_TRANSSYS();
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
P_CS_ERROR('SYS',NULL,SQLERRM,'CS');
END;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
P_CS_ERROR('SYS','STOP',SQLERRM,'CS');
END P_TB_YYS ;
oracle 过程 执行字符串sql
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 用的是PL/SQL,在执行存储过程时使用了:EXEC INSERTINFO语句,然后一直弹出error: 后来发现...
- 1. oracle在sql中判断字段值是数字还是字符串: 2. 延伸应用:判断字段中包括哪几种类型 3. nvl2...
- http://111.231.111.54/泄露了两个源码.login.php.swp .admin.php.sw...
- 1、背景 由于做的一个小项目里需要联动查询,一想16种情况,因为我是SSM框架写的,这样我就要写16个接口,16个...
- REPLICATE 微软TechNET解释(https://technet.microsoft.com/zh-c...