Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> RE: Do triggers cause a context switch between SQL & PL/SQL

RE: Do triggers cause a context switch between SQL & PL/SQL

From: Jamadagni, Rajendra <Rajendra.Jamadagni_at_espn.com>
Date: Wed, 02 Apr 2003 04:54:03 -0800
Message-ID: <F001.00577D1A.20030402045403@fatcity.com>


I am not sure ... so far as I know "select count(*) from some_table" without any further group by has always resulted in one row ...  

Raj




Rajendra dot Jamadagni at nospamespn dot com All Views expressed in this email are strictly personal. QOTD: Any clod can have facts, having an opinion is an art !

-----Original Message-----
Sent: Tuesday, April 01, 2003 7:07 PM
To: 'ORACLE-L_at_fatcity.com'
Cc: Jamadagni, Rajendra

Your query with the exists would be the same as doing this, right? select count(*)
  into numrows
from from ApplicationFormCriteria
where ApplicationFormCriteria.applicationFormId = :old.applicationFormId

      and rownum = 1 ;

-----Original Message-----
<mailto:Rajendra.Jamadagni_at_espn.com> ]

Sent: mardi, 1. avril 2003 13:04
To: Multiple recipients of list ORACLE-L

A context switch is order because a trigger is a pl/sql object ... if you can change the trigger ... instead of count(*) try using exists assuming you have a usable index ...
select count(*)
  into numrows
from dual
where exists ( select 1

                from ApplicationFormCriteria 
               where ApplicationFormCriteria.applicationFormId =
:old.applicationFormId);
If you have an index on "ApplicationFormCriteria.applicationFormId", this should fly ... and still accomplish what you need.

The basic problem here is the developer doesn't understand the question. If the question is "Is there at-least one row that mayches a given value so that I can restrict the delete"? then my solution is the right one.

If the question is "How many rows do I have matches a given value so I can ... "? then the SQL you have is the right one.

Looking at the pl/sql code, the question is the former one and the SQL used by the developer is the wrong one. When you do a count(*) oracle will search the table till the HWM, if the table is large, it will make lot of difference. Where the query above will stop after it finds the first matching row, most likely doing less work that the query you have.

You can say I am picking on the semantics, but see how much difference it makes?


-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: Jamadagni, Rajendra
  INET: Rajendra.Jamadagni_at_espn.com

Fat City Network Services    -- 858-538-5051 http://www.fatcity.com
San Diego, California        -- Mailing list and web hosting services
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Received on Wed Apr 02 2003 - 06:54:03 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US