如何将字符串与Oracle SQL中的模式进行匹配

时间:2016-03-31 10:01:37

标签: sql oracle oracle11g

我有一些不同的情况。表中有一列(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

这是理想的结果。

1 个答案:

答案 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