ORACLE中如何实现此类条件匹配?
白头陀 2018-09-29 03:45:33 现在有这样需求:
表里两个字段,如下:
create table T1
(
a1 VARCHAR2(400),
a2 VARCHAR2(100),
a3 CHAR(1)
);
插入数据用 test window,否则有系统字符(&变量符合)无法插入,代码为:
----------------------------------------------------------test 窗口执行开始-------------------
declare
i integer;
begin
declare
i integer;
begin
insert into T1
SELECT '0A0&0B0&0DM&0F3&1A8' A1,
'0A0&0B0&0DM' A2 , 1 A3
FROM DUAL
UNION ALL
SELECT '0A0&0B0&0DM&0F3&1A8' A1,
'0A0&0B0&(0DM)' A2,2 A3
FROM DUAL
UNION ALL
SELECT '0A0&0B0&0DM&0F3&1A8' A1,
'0A0&0B0&(0F3|OX5)' A2,3 A3
FROM DUAL
UNION ALL
SELECT '0A0&0B0&0DM&0F3&1A8' A1,
'0A0&(!OX5)' A2,4 A3
FROM DUAL
UNION ALL
SELECT '0A0&0B0&0DM&0F3&1A8' A1,
'9E1&OBO&(7KA7|A77K)' A2,5 A3
FROM DUAL;
end;
------------------------------------------------------------------------
想实现如下目标:
1 表T1中列A1包含列A2的关系,则认为符合条件。
2 表中列A2 中内容包括 以下分隔符:
2.1 & 表示并列前后字符串分割开,每个必须都在列A1,则算满足。例如 ,A1='0A0&0B0&0DM', A2='OAO&ODM',则认为
符合条件;
2.2 ! 表示非的意思,例如 ,A1='0A0&0B0&0DM', A2='!123',表示满足;
2.3 |表示或,例如 ,A1='0A0&0B0&0DM', A2='OAO&(ODM|123)',表示满足;
2.4()表示逻辑运算符,优先级
哪位高手有个效率高的方法,求助,我现在写了一个解析,效率比较低。
我的思路是: 把列A2中的分隔符分别判断,然后硬解析。
有谁帮帮我,困扰好几天了,多谢