Title: RE: Different behavior of Too_many_rows exception in pl/sql betwe

if you are looking for one row only, then A and C will do. Since C involves a little bit of more coding and A does the same thing, A would be a better choice. But if you are coding to trap too many rows, then you should check for exceptions, all depends on your requirement.

rgds
amar

-----Original Message-----
From: Norrell, Brian [mailto:[EMAIL PROTECTED]]
Sent: Friday, June 22, 2001 12:36 AM
To: Multiple recipients of list ORACLE-L
Subject: RE: Different behavior of Too_many_rows exception in pl/sql
betwe


I have seen code that depends on the 8.1 behavior.  It does bring up a
question I have always wondered about.  The question for the internals
ubergeeks is: which of the following is best to use? (All should have the
same result, so which one has the best performance and why?)

A)
declare
  y number;
begin
  select x into y from z where rownum = 1;
  foo(y);
end;

B)
declare
  y number;
begin
  begin
    select x into y from z;
  exception
    when too_many_rows then null;
  end;
  foo(y);
end;

C)
declare
  y number;
  cursor c is
    select x into y from z;
begin
  open c;
  fetch c into y;
  close c;
  foo(y);
end;

D) something else more clever or obscure ???

Brian Norrell
Manager, MPI Development
QuadraMed
511 E John Carpenter Frwy, Su 500
Irving, TX 75062
(972) 831-6600


-----Original Message-----
[mailto:[EMAIL PROTECTED]]
Sent: Thursday, June 21, 2001 2:34 PM
To: Multiple recipients of list ORACLE-L
v7&v8i



We noticed a different behavior with too_many_rows exception in v7 and v8i.
Is this a bug or that's the way it should work in 8i?

I really appreciate your feedback on this.
Thanks & Regards,
Prasad

declare
v_table_name    user_tables.table_name%TYPE;
begin
v_table_name := null;
select  table_name
into    v_table_name
from    user_tables;
dbms_output.put_line('v_table_name : '||nvl(v_table_name,'null'));
exception
when too_many_rows then
    dbms_output.put_line('too_many_rows exception, v_table_name : '
||nvl(v_table_name,'null'));
when others then
    dbms_output.put_line(sqlerrm);
end;
/

In v7.3, It keeps value remains null in v_table_name column and v8i it is
assigning the first received value.
In both cases, It is raising too_many_rows exception.

Output in v7.3:

too_many_rows exception, v_table_name : null

PL/SQL procedure successfully completed.

Output in v8.1.7, v8.1.6, v8.1.5

too_many_rows exception, v_table_name : CHAMPION_LIFE_DGNSS_CATEGORY

PL/SQL procedure successfully completed.



--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author:
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (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).
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: Norrell, Brian
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051
San Diego, California        -- Public Internet access / Mailing Lists
--------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (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).

Reply via email to