Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Join using LIKE operator [SOLVED]

Peter GjelstrupJul 23 2008 — edited Jul 24 2008

Hi,

BANNER                                                          
-------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production                          
CORE	10.2.0.3.0	Production                                      
TNS for IBM/AIX RISC System/6000: Version 10.2.0.3.0 - Productio
NLSRTL Version 10.2.0.3.0 - Production 

I am given a log table tlog that has a few mio records, and need to group the messages based on their pattern. My problem is that the message are not defined anywhere, so I have created my own definition in table regx. Currently, this table has 65 records and I expect it to grow to perhaps 100-200.

These are the tables:

drop table tlog purge;
drop table regx purge;

create table tlog (id number(9) primary key, msg varchar2(55));
create table regx (id number(9) primary key, pattern varchar2(55) not null unique);

insert into tlog values(1, 'Error where item = 1234');
insert into tlog values(2, 'Error where item = 2345');

insert into tlog values(3, 'Discard due to code = 123 on customer');
insert into tlog values(4, 'Discard due to code = 234 on customer');
insert into tlog values(5, 'Discard due to code = 345 on customer');

insert into tlog values(6, 'Discard due to code = 123 on vendor = 456');
insert into tlog values(7, 'Discard due to code = 234 on vendor = 567');
insert into tlog values(8, 'Discard due to code = 345 on vendor = 678');
insert into tlog values(9, 'Discard due to code = 456 on vendor = 789');

insert into regx values (100, 'Error where item =%');
insert into regx values (200, 'Discard due to code =%on customer');
insert into regx values (300, 'Discard due to code =%on vendor =%');
commit
/

select * from tlog;

select * from regx;
/

Now, I can do something like this:

select regx.id, count(*)
  from regx, tlog
 where tlog.msg like regx.pattern
group by regx.id
order by regx.id;

        ID   COUNT(*)
---------- ----------
       100          2
       200          3
       300          4
3 rows selected.       

So far so good. My problem now is that I have messages that does not fall into
any of the categories. Consider

insert into tlog values(10, 'Other kind of message');
insert into tlog values(11, 'Another kind of message');
insert into tlog values(12, 'Yet, another');
insert into regx values (400, '%');
commit
/

select regx.id, count(*)
  from regx, tlog
 where tlog.msg like regx.pattern
group by regx.id
order by regx.id;

        ID   COUNT(*)
---------- ----------
       100          2
       200          3
       300          4
       400         12 wrong! 
4 rows selected.       

The correct answer for group *400* would be 3.

Any ideas on how to handle these other messages?

Any changes to the regx table, including contents and definition is possible. Changes to tlog table is not.

Regards
Peter

Message was edited by:
Peter Gjelstrup (Added banner)

Message was edited by:
Peter Gjelstrup [SOLVED]

Comments

SomeoneElse
I don't have an answer, but this is confirmed on 10.2.0.4:
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options


SQL> select * from dual model
  2   dimension by(0 as d)
  3   measures(1 as m)
  4   rules(
  5   m[any] = case when not m[1] is present then 1 end);
select * from dual model
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
666352
can you chech you alert trace , may be you can find more details.
SQL> show parameter background_dump_dest;
Hoek
I get:
ops$me%DB>  select * from dual model
  2    dimension by(0 as d)
  3    measures(1 as m)
  4    rules(
  5    m[any] = case when not m[1] is present then 1 end);
 select * from dual model
               *
ERROR at line 1:
ORA-03002: operator not implemented


Elapsed: 00:00:00.03
ops$me%DB> select banner from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production
Aketi Jyuuzou
Thankys for replys.

I checked traceFile which is below.
Fri Mar 20 23:22:54 2009
Errors in file d:\oracle\product\10.2.0\admin\orcl\udump\orcl_ora_948.trc:
ORA-07445: 例外が検出されました: コア・ダンプ 
[ACCESS_VIOLATION] [_qcss_process_expr+226] [PC:0x1E24A46] [ADDR:0x18] [UNABLE_TO_READ] []
umm I think I will use presentv insted of is present
Solomon Yakobson
Answer
[Bug 6530708|https://metalink2.oracle.com/metalink/plsql/ml2_documents.showDocument?p_id=6530708&p_database_id=BUG]

SY.
Marked as Answer by Aketi Jyuuzou · Sep 27 2020
Aketi Jyuuzou
Oh thank you,
someday,I will get metaLink accout.
I will see that.
666352
But you can use this code .
 1  select * from dual model
 2   dimension by(0 as d)
 3   measures(1 as m)
 4   rules(
 5*  m[any] = case when  m[1] is present then null else 1 end)
 6  /

        D          M
--------- ----------
        0          1
Laurent Schneider
I created that bug at the time I was writting my chapter on model...

Strangely the error changed in 11.2.0.2
select * from dual model
 dimension by(0 as d)
 measures(1 as m)
 rules(
 m[any] = case when not(m[1] is  present) then 1 end)
              *
Error at line 1
ORA-03002: operator not implemented
Edited by: Laurent Schneider on Jan 13, 2011 11:32 AM

the ORA-3002 was already mentioned, sorry
1 - 8
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Aug 20 2008
Added on Jul 23 2008
8 comments
13,509 views