上下文
使用Oracle 12c标准版(其许可模式不允许使用表分区)。
目标
在触发器内使用它可以动态地将行分派给不同的表。
示例
CREATE OR REPLACE trigger TRG_DISPATCH
instead of insert or update on MY_VIEW
for each row
DECLARE
partition_id SIMPLE_INTEGER ;
BEGIN
partition_id := 1 ;
insert into
case
when partition_id = 1 then "my_table_1"
when partition_id = 2 then "my_table_2"
end ( "id", "code", "msg" )
values
( :new."id", :new."code", :new."msg" )
;
END ;
/
注意 我已经知道this cannot be achieved using Microsoft SQL Server 2005,但所有RDBMS都不相同。
答案 0 :(得分:4)
首先,为什么不使用Oracle中的内置分区功能?更容易。
Oracle支持insert first
:
insert first
when partition_id = 1 then
into my_table_1( "id", "code", "msg" )
values ( :new."id", :new."code", :new."msg" )
when partition_id = 2 then
into my_table_2( "id", "code", "msg" )
values ( :new."id", :new."code", :new."msg" );