暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用触发器通过数据库链路将数据从一个数据库传输到另一个数据库

askTom 2017-11-19
172

问题描述

嗨,我正在从事一个涉及数据集市的项目。我们正在创建触发器,将数据从OLTP DB传输到数据集市 (在线提取)。以下是涉及clob列的表的触发器代码。我已经看到了针对clob的不同解决方案,并且还使用了其中之一,但是我们如何在触发器中转移clob,如下所示:
创建或替换触发器transfer_case_info
插入或更新后
关于案例信息
对于每一行
声明
游标ppccursor是
选择regexp_substr(:new.US_PPC,'[^,]',1,级别) 作为sectionid从双连接通过regexp_substr(:new.US_PPC,'[^,]',1,级别) 不为空;

游标cpccursor是
选择regexp_substr(:new.US_CPC,'[^,]',1,级别) 作为sectionid从双连接通过regexp_substr(:new.US_CPC,'[^,]',1,级别) 不为空;

光标crpccursor是
选择regexp_substr(:new.US_CRPC,'[^,]',1,级别) 作为sectionid从双连接通过regexp_substr(:new.US_CRPC,'[^,]',1,级别) 不为空;


开始
插入到暗盒信息 @ shc_oltp_mart (
案例 _ uac,
案例 _ 否,
案例 _ 年,
类别,
设立的地区,
us_ppc,
us_cpc,
美国crpc,
状态,
处置日期,
处置自然,
司法方面,
机构日期,
判断,
第一法院,
案例标题,
案例 _ 阶段,
法院名称,
更新日期,
长凳,
机构的方法,
hc_side,
判断状态,
应用程序类型,
响应类型,
高级法院)

(
: 新的。案例 _ uac,
: 新的。案例 _ 否,
: 新的。案例 _ 年,
: 新类别,
: 新成立的地区,
: 新的.US_PPC,
: 新的。US_CPC,
: 新的。美国crpc,
: 新状态,
: 新的。处置日期,
: 处置的新性质,
: 新的。司法方面,
: 新机构日期,
: 新的判断,
: 新的。第一法院,
: 新的。案例标题,
: 新的。案例 _ 阶段,
: 新的。法院名称,
: 新的。更新日期,
: 新长凳,
: 新的。制度方法,
: 新的。hc _ 侧,
: 新的。判断状态,
: 新的。应用程序类型,
: 新的。响应类型,
: 新的。赞成决定,
: 新的。声明 _ 状态,
: 新的。案例 _ 日记 _ 状态,
: 新的。高法院
);

对于ppccursor中的代码
循环
插入dim_cases _ 犯罪 (
案例 _ uac,
代码类别,
section_id

)

(
: 新的。案例 _ uac,
“Ppc”,
代码。sectionid
);
end 循环;

对于cpccursor中的代码
循环
插入dim_cases _ 犯罪 (
案例 _ uac,
代码类别,
section_id

)

(
: 新的。案例 _ uac,
'CPC',
代码。sectionid
);
end 循环;

对于crpccursor中的代码
循环
插入dim_cases _ 犯罪 (
案例 _ uac,
代码类别,
section_id

)

(
: 新的。案例 _ uac,
'CRPC',
代码。sectionid
);
end 循环;


结束;


>


这里的判断列是clob数据。感谢解决方案和帮助!谢谢。

专家解答

嗯,一个解决很多头痛的选择是转向12.2

SQL> select * 
  2  from   t@db11;

ERROR:
ORA-22992: cannot use LOB locators selected from remote tables


SQL> select * 
  2  from   t@db122;

        ID C
---------- --------------------------------------------
         1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



取消了许多分布式lob限制。

在此之前,将过程推迟到语句之后,例如

--
-- target (database = db11)
--
SQL> create table t ( x int, c clob );

Table created.


--
-- source
--
SQL> create table t ( x int, c clob );

Table created.

SQL> create or replace trigger trg
  2  for insert on t
  3  compound trigger
  4
  5    pk sys.odcinumberlist := sys.odcinumberlist();
  6
  7    before each row is
  8    begin
  9      pk.extend;
 10      pk(pk.last) := :new.x;
 11    end before each row;
 12
 13    after statement is
 14    begin
 15      for i in pk.first .. pk.last loop
 16        insert into t@db11
 17        select x, c
 18        from   t
 19        where  x = pk(i);
 20      end loop;
 21
 22    end after statement;
 23
 24  end;
 25  /

Trigger created.

SQL>
SQL> insert into t values (1,'xxxxxxxxxxxxxxxx');

1 row created.

SQL> commit;

Commit complete.

--
-- target
--
SQL> select * from t;

         X C
---------- --------------------------
         1 xxxxxxxxxxxxxxxx

1 row selected.


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论