Oracle遍历当前用户下的所有表,并从通过dblink从另一个用户下同名的表中获取数据插入

数据的流 2013-01-25 04:37:32
现在有两个用户A和B,用户A下的表是用户B下表的子集,现在每天需要执行的操作是:将B用户表中符合一定查询条件的数据插入A用户的表中,A用户下表的个数并不固定,以后可能增加或删除,但总是符合是B用户下表的子集。

我的思路是:
遍历A用户下的所有表,并从通过dblink从B用户下同名的表中获取数据插入,求教这个过程该怎么写?
...全文
941 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
数据的流 2013-02-18
  • 打赏
  • 举报
回复

CREATE OR REPLACE PACKAGE PKG_temp is
TYPE T_CURSOR IS REF CURSOR;
procedure pro_get_all(CUR_OUT OUT T_CURSOR);
END PKG_temp;
CREATE OR REPLACE PACKAGE BODY PKG_temp
is
procedure pro_get_all(CUR_OUT OUT T_CURSOR) is
v_col_list varchar2(500):='';
v_tab_str  varchar2(500):='';
begin
FOR tb IN (SELECT table_name FROM user_tables) LOOP
  v_tab_str:=tb.table_name||','||v_tab_str;
  v_col_list:='';
  FOR col IN (select column_name from user_tab_cols where table_name =tb.table_name ) LOOP
      v_col_list:=col.column_name||','||v_col_list;
  END LOOP;
  /*dbms_output.put_line(v_col_list);*/
  execute immediate 'insert into '||tb.table_name||'@dblink_sjl select * from '|| tb.table_name;
  commit;
  open CUR_OUT for 'select 1 from dual';
END LOOP;
end;
END PKG_temp;
好吧,大致代码我是这么写的。。。结贴送分。。。
善若止水 2013-02-08
  • 打赏
  • 举报
回复
这必须借助用户视图和动态语句才能实现。我的想法是,利用dba用户先把用户a的所有的表查出来,利用游标进行保存。然后逐个循环的查出每个表名后,用动态语句来实现表与表之间的插入数据。
多壮志 2013-02-06
  • 打赏
  • 举报
回复
这很简单。 dba_tables,dba_tab_columns,以及动态语句可以解决。剩下的就是简单的循环控制逻辑。 类似作用的视图也可以完成这些功能。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧