Oracle通过dblink抽取数据处理


就是通过select * from user_sequence和select * from all_tables 来获取sequence和table的名字进行拼串

最怕的就是当前账号的权限不够。还好是测试环境,我能随便折腾

 

  1. create or replace package extraction_data is  
  2.   -- Author  : ADMINISTRATOR   
  3.   -- Created : 2010-12-15 下午 03:36:28   
  4.   -- Purpose : 抽取数据   
  5.      
  6.   Cursor TNAME is SELECT table_name AS table_name  FROM all_tables@TB.REGRESS.RDBMS.DEV.US.Oracle.COM where   owner   =upper('tieba');   
  7.      
  8.   PROCEDURE EXT_DATA;   
  9.      
  10.   PROCEDURE EXT_SEQ;   
  11. end extraction_data;   
  12. /   
  13. create or replace package body extraction_data is  
  14.   
  15. PROCEDURE EXT_DATA IS   
  16. BEGIN   
  17. FOR  T IN TNAME LOOP   
  18. /*  dbms_output.put_line('执行insert过程'||T.table_name);*/  
  19.   --执行表的删除操作,防止重复插入数据   
  20.   begin   
  21.   EXECUTE IMMEDIATE 'drop table '||T.table_name ;   
  22.   EXCEPTION WHEN OTHERS THEN NULL;   
  23.   end;   
  24.      
  25.   --输出要执行的sql   
  26.   dbms_output.put_line('create table tieba.'||T.table_name||' as select * from '||T.table_name||'@TB.REGRESS.RDBMS.DEV.US.ORACLE.COM');   
  27.   dbms_output.put_line('commit;');   
  28.   --将远程的表的数据拿到本地,可能执行不了呀   
  29.   /*EXECUTE IMMEDIATE 'create table tieba.'||T.table_name||' as select * from '||T.table_name||'@TB.REGRESS.RDBMS.DEV.US.ORACLE.COM';*/  
  30.      
  31. END LOOP;   
  32. END EXT_DATA;   
  33. --此过程没有成功执行。如果需要可以拼装sequence串   
  34. PROCEDURE EXT_SEQ IS   
  35. BEGIN   
  36. -- Create sequence    
  37. --create sequence ADMIN_MESSAGE_SEQ minvalue 1 maxvalue 999999999 start with 100000 increment by 1 cache 20;   
  38. --select * from user_sequence;   
  39. FOR  T IN (select * from user_sequences@TB.REGRESS.RDBMS.DEV.US.ORACLE.COM) LOOP   
  40. /*  dbms_output.put_line('执行insert过程'||T.table_name);*/  
  41.   --执行表的删除操作,防止重复插入数据   
  42.   begin   
  43.   EXECUTE IMMEDIATE 'drop sequence '||T.sequence_name ;   
  44.   EXCEPTION WHEN OTHERS THEN NULL;   
  45.   end;   
  46.      
  47.   --输出要执行的sql   
  48.   dbms_output.put_line('create sequence tieba.'||T.sequence_name||'  minvalue 1 maxvalue 999999999 start with '||T.LAST_NUMBER||' increment by 1 cache 20;');   
  49. /* EXECUTE IMMEDIATE 'create sequence tieba.'||T.sequence_name||'  minvalue 1 maxvalue 999999999 start with '||T.LAST_NUMBER||' increment by 1 cache 20;';*/  
  50. END LOOP;   
  51.  dbms_output.put_line('commit;');   
  52. END EXT_SEQ;   
  53. end extraction_data;   
  54. /  

相关内容