Re: Reduce parse call for stored procedure?

2002-10-23 Thread mkb
How about using bind variables in your execute
immediate statement.

Please see doc id 34433.1 and 366753.999 on Metalink
as I followed 34433.1 for what I tested below. 
366753.999 is a forum question which relates very well
to doc id 34433.1.

create table t (col1 number, col2 varchar2(10));

create or replace procedure sp_test (
  p_col1 in number,
  p_col2 in varchar2,
  p_errcd out number,
  p_errmsg out varchar2)

as

begin

   execute IMMEDIATE
  'insert into t
   (col1,
Col2)
  values (:b1, :b2)'
   USING p_col1, p_col2;

   p_errcd := SQLCODE;
   p_errmsg := SQLERRM;

EXCEPTION
WHEN others THEN
   ROLLBACK;
   p_errcd := SQLCODE;
   p_errmsg := SQLERRM;
end;
/

Then did this:

alter system flush shated_pool=true;
alter session set sql_trace=true;
var errcd number;
var errmsg varchar2(2000);
-- exec the following about 5 times
exec sp_test(1,'A',:errcd,:errmsg);

alter session set sql_trace=false;

--Now check the following:
select sql_text, loads, executions, PARSE_CALLS
from v$sql
where sql_text like 'insert into t%col1%'
;
 LOADS EXECUTIONS PARSE_CALLS
-- -- ---
 1  5   5
 1  0   0

Check sql_trace output, I get the following for each
of the 5 executions (note that mis=0 indicating that
it is not a hard parse):

PARSING IN CURSOR #1 len=45 dep=0 uid=67 oct=47 lid=67
tim=2182033968 hv=1348535850 ad='79547da4'
BEGIN sp_test(1,'A', :errcd, :errmsg); END;
END OF STMT
PARSE
#1:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=2182033968
=
PARSING IN CURSOR #2 len=65 dep=1 uid=67 oct=2 lid=67
tim=2182033968 hv=2052728044 ad='79d476b0'
insert into t
   (col1,
Col2)
  values (:b1, :b2)
END OF STMT
PARSE
#2:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=2182033968
EXEC
#2:c=0,e=0,p=0,cr=1,cu=1,mis=0,r=1,dep=1,og=4,tim=2182049968
EXEC
#1:c=15625,e=16000,p=0,cr=1,cu=1,mis=0,r=1,dep=0,og=4,tim=2182049968

So, in conclusion, by using bind var in my proc, I
have reduced the hard parse count.

hth

mkb
(Hoping that if I have misstated anything, someone
will correct me.)

--- chao_ping [EMAIL PROTECTED] wrote:
 Chuan Zhang,
   Since you are using execute immediate, you use
 dynamic sql.
   If you want to reduce the parse, can u try not
 using the dynamic sql?
   Keep it won't help at all.
 
 
 
 Regards
 zhu chao
 Eachnet DBA
 86-21-32174588-667
 [EMAIL PROTECTED]
 www.happyit.net
 
 
 === 2002-10-22 23:43:00 ,you wrote£º===
 
 Hi, DBA Guru,
 
I have a stored procedure of a package which is
 called with execute immediate in a loop with
 runtime input parameters. I found that no. of parse
 calls(451983)  is equal to no. of executions
 (451982).  Is there any way such as set
 cursor_sharing=force or keep this stored procedure
 into shared pool to reduce the parse call down to
 one or some no.?
 
 TIA,
 
 Chuan
 
 = = = = = = = = = = = = = = = = = = = =
   
 
 
 
 --
 Please see the official ORACLE-L FAQ:
 http://www.orafaq.com
 --
 Author: chao_ping
   INET: [EMAIL PROTECTED]
 
 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: [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).


__
Do you Yahoo!?
Y! Web Hosting - Let the expert host your web site
http://webhosting.yahoo.com/
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: mkb
  INET: [EMAIL PROTECTED]

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: [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).



Reduce parse call for stored procedure?

2002-10-23 Thread Chuan Zhang
Hi, DBA Guru,

   I have a stored procedure of a package which is called with execute immediate in 
a loop with runtime input parameters. I found that no. of parse calls(451983)  is 
equal to no. of executions (451982).  Is there any way such as set 
cursor_sharing=force or keep this stored procedure into shared pool to reduce the 
parse call down to one or some no.?

TIA,

Chuan

Unless otherwise stated, this e-mail does not represent the views of 
TransACT Communications Pty Limited.  This text and any attachments of 
this e-mail are confidential and may be legally privileged.  This email 
is for the use of the intended recipient only. If you are not the intended 
recipient do not take any action in relation to this email, other than to 
notify TransACT Communications by replying to this e-mail and destroying 
the original communication.  Except as required by law, TransACT 
Communications does not represent that this transmission is free of errors, 
viruses or interference.





Re: Reduce parse call for stored procedure?

2002-10-23 Thread prem

You can probably try keeping this in the shared pool. using the DBMS_SHARED_POOL.keep('procedure name');






Chuan Zhang [EMAIL PROTECTED]
Sent by: [EMAIL PROTECTED]
10/23/02 01:13 PM
Please respond to ORACLE-L


To:Multiple recipients of list ORACLE-L [EMAIL PROTECTED]
cc:
Subject:Reduce parse call for stored procedure?


Hi, DBA Guru,

 I have a stored procedure of a package which is called with execute immediate in a loop with runtime input parameters. I found that no. of parse calls(451983) is equal to no. of executions (451982). Is there any way such as set cursor_sharing=force or keep this stored procedure into shared pool to reduce the parse call down to one or some no.?

TIA,

Chuan


Unless otherwise stated, this e-mail does not represent the views of 
TransACT Communications Pty Limited.  This text and any attachments of 
this e-mail are confidential and may be legally privileged.  This email 
is for the use of the intended recipient only. If you are not the intended 
recipient do not take any action in relation to this email, other than to 
notify TransACT Communications by replying to this e-mail and destroying 
the original communication.  Except as required by law, TransACT 
Communications does not represent that this transmission is free of errors, 
viruses or interference.




Re: Reduce parse call for stored procedure?

2002-10-23 Thread chao_ping
Chuan Zhang,
Since you are using execute immediate, you use dynamic sql.
If you want to reduce the parse, can u try not using the dynamic sql?
Keep it won't help at all.



Regards
zhu chao
Eachnet DBA
86-21-32174588-667
[EMAIL PROTECTED]
www.happyit.net


=== 2002-10-22 23:43:00 ,you wrote£º===

Hi, DBA Guru,

   I have a stored procedure of a package which is called with execute immediate in 
a loop with runtime input parameters. I found that no. of parse calls(451983)  is 
equal to no. of executions (451982).  Is there any way such as set 
cursor_sharing=force or keep this stored procedure into shared pool to reduce the 
parse call down to one or some no.?

TIA,

Chuan

= = = = = = = = = = = = = = = = = = = =




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

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: [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).