Oracle 利用存储过程创建表同步数据

        今天从A用户同步表数据到B用户时,且后续需定期进行同步。所以就想到了使用存储过程+定时器进行实现。但是没想到表中包含clob字段,存储过程中竟然无法通过竟然无法A.table方式进行实现。所以就通过创建DBLINK方式进行实现了。具体内容如下:

以下内容均在B用户下进行操作

1、对用户进行授权:

grant create table,connect,dba to A; 

注:create table 需显示声明授权,否则存储过程在创建表时会提示权限不足。

2、创建DBLIN

create public databaselink dblink_A

connect A identified by aaa;

3、在B用创建存储过程

CREATE OR REPLACE PROCEDURE TRANSFER_A  AUTHID current_user AS

  CUR_ID    NUMBER(4);

  PLAN_COUNT NUMBER(4);

BEGIN

  EXECUTE IMMEDIATE 'drop TABLE remote_A ';

  EXECUTE IMMEDIATE 'CREATE TABLE remote_A AS SELECT * FROM table_A@dblink_A';

  PLAN_COUNT := 0;

  DECLARE

    CURSOR A_CURSOR IS

      SELECT ID,NAME,INFO

        FROM remote_A T ;

  BEGIN

    FOR REC IN A_CURSOR  LOOP

      SELECT SEQ_TABLE_A.NEXTVAL INTO CUR_ID FROM DUAL;

      INSERT INTO A  (ID,NAME,INFO)

        SELECT CUR_ID,NAME,INFO   FROM DUAL;

       PLAN_COUNT := PLAN_COUNT + 1;

    END LOOP;

  END;

  COMMIT;

  DBMS_OUTPUT.PUT_LINE('迁移完成,共迁移' || PLAN_COUNT || '条记录');

EXCEPTION

  WHEN OTHERS THEN

    ROLLBACK;

    DBMS_OUTPUT.PUT_LINE('迁移失败');

END TRANSFER_A ;

4、创建job

declare

  variable job number;

begin

  sys.dbms_job.submit(job => :job,

                      what => 'TRANSFER_A ;',

                      next_date => to_date('25-10-2019 00:42:06', 'dd-mm-yyyy hh24:mi:ss'),

                      interval => 'sysdate+1/2');

  commit;

end;

5、测试

测试通过,大功告成!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。