问题描述
嗨,我正在从事一个涉及数据集市的项目。我们正在创建触发器,将数据从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数据。感谢解决方案和帮助!谢谢。
创建或替换触发器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
取消了许多分布式lob限制。
在此之前,将过程推迟到语句之后,例如
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




