我有一些不同的情况。表中有一列(Oracle表),用于存储模式。另一列具有唯一ID。 现在,我必须将这些模式与字符串匹配,并且必须找出哪些模式匹配该字符串。然后我必须选择那些匹配的模式以及ID 任何人都可以指导我如何有效地做到这一点吗?
Table 1
-------
Column1 Column2
1 AB%
2 A%
3 %c%
现在,有一个像ABC一样的字符串(把它作为一个项目编号。它插入到数据库中,然后触发一个触发器,它必须完成下面示例中提供的其余工作)
Table 2
---------
Column1 Column2
ABC AB%,A%
或更高效(期望)表2将类似于 -
Table 2(desired)
---------
Column1 Column2
ABC 1,2
这是理想的结果。
答案 0 :(得分:0)
在Oracle 11g中,您可以使用函数listagg
简单before insert or update trigger
:
示例数据:
create table table1 (column1 number(3), column2 varchar2(10));
insert into table1 values (1, 'AB%');
insert into table1 values (2, 'A%');
insert into table1 values (3, '%c%');
create table table2 (column1 varchar2(10), column2 varchar2(500));
触发:
create or replace trigger tg_table2_ins
before insert or update of column1 on table2 for each row
declare
v_list table2.column2%type;
begin
select listagg(t1.column1, ', ') within group (order by t1.column1)
into v_list from table1 t1
where :new.column1 like t1.column2;
:new.column2 := v_list;
end tg_table2_ins;
测试:
insert into table2 (column1) values ('ABC');
insert into table2 (column1) values ('Oracle');
insert into table2 (column1) values ('XYZ');
insert into table2 (column1) values ('Ascii');
select * from table2;
COLUMN1 COLUMN2
---------- ----------
ABC 1, 2
Oracle 3
XYZ
Ascii 2, 3