[求助] 小菜鸟求助关于存储过程的问题_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1785 | 回复: 0   主题: [求助] 小菜鸟求助关于存储过程的问题        下一篇 
qq_1435287279089
注册用户
等级:上尉
经验:560
发帖:36
精华:0
注册:2015-6-26
状态:离线
发送短消息息给qq_1435287279089 加好友    发送短消息息给qq_1435287279089 发消息
发表于: IP:您无权察看 2015-9-10 16:25:52 | [全部帖] [楼主帖] 楼主

CREATE OR REPLACE PROCEDURE ZENG_Proc1
IS
v_To VARCHAR2(30);
v_Ti VARCHAR2(30);
v_P VARCHAR2(30);
v_P2 VARCHAR2(30);
v_Col VARCHAR2(30);
v_Col2 VARCHAR2(30);
Sql_srv VARCHAR2(2000);
v_Insert VARCHAR2(600);
v_Update VARCHAR2(800);
v_Values VARCHAR2(600);
BEGIN
--从中间表取得表名,主键名 ,预定义更新、插入语句
FOR r IN (SELECT tableout,TABLEIN,PRIMARY_KEY FROM ZENG_TABLE )LOOP
v_To:= r.tableout;
v_Ti:= r.tablein;
v_P:=','||r.primary_key||',';
v_Update:= NULL;
v_Insert:= NULL;
v_Values:= NULL;
v_P2:= NULL;
--定义更新、插入语句,v_col为列名,v_p2为主键合集,v_update为更新字段,v_insert为插入字段,v_values为插入值
FOR k IN(SELECT column_name FROM user_tab_cols WHERE table_name=v_To)LOOP
v_Col:=k.column_name;
v_Col2:=','||v_Col||',';--加入逗号便于排除主键列名含于其他列名的影响
v_Insert:=v_To||'.'||v_Col||','||v_Insert;
v_Values:='INTF_OSS_APP.'||v_Ti||'@TO_INTF.'||v_Col||','||v_Values;--@dblink
IF INSTR('v_P','v_Col2',1,length(v_P))>0
THEN v_P2:=v_To||'.'||v_Col||'='||'INTF_OSS_APP.'||v_Ti||'@TO_INTF.'||v_Col||','||v_P2;--@dblink
ELSE
v_Update:=v_To||'.'||v_Col||'='||'INTF_OSS_APP.'||v_Ti||'@TO_INTF.'||v_Col||','||v_Update;--@dblink
END IF;
END LOOP;
v_Update:=SUBSTR(v_Update,1,(LENGTH(v_Update)-1));
v_Insert:=SUBSTR(v_Insert,1,(LENGTH(v_Insert)-1));
v_Values:=SUBSTR(v_Values,1,(LENGTH(v_Values)-1));
v_P2:=SUBSTR(v_P2,1,(LENGTH(v_P2)-1));
--实现更新插入功能
Sql_srv:='MERGE INTO'||' '||v_To||' '||'USING'||' '|| v_Ti||' '||'ON('||v_P2
||')'||' '||'WHEN MATCH THEN UPDATE SET'||' '||v_Update||' '
||'WHEN NOT MATCHED THEN INSERT('||v_Insert||')VALUES('||v_Values||')';
EXECUTE IMMEDIATE Sql_srv;
END LOOP;

--报错
EXCEPTION
WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('更新错误');
END ZENG_Proc1;

调用用
BEGIN
ZENG_PROC1;
END;
然后一点用都没有,到底是哪里出错了.....
注,函数是为了实现建立数据链路动态更新本地表,我建了个中间表,外源表名、本地表名、主键三列,二重循环MERGE实现




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论