Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Bind Variables Using ODP.NET
Hi
Thanks for the Reply
AS per your suggesion and my understanding i tried the following
two options
Option 1.
from my understanding of implicite cursor i have tried to reuse the same command object
i have take 3 command objects and prepared them once. It works only for first call of each query , next time it give exception ORA-01036: illegal variable name/number
code is as follows
//first SQL
cmd1 = new OracleCommand(CreateSQLStatement(0),conn);
cmd1.CommandType=CommandType.Text;
cmd1.Prepare();
//Second SQL
cmd2 = new OracleCommand(CreateSQLStatement(1),conn);
cmd2.CommandType=CommandType.Text;
cmd2.Prepare();
//Third SQL
cmd3 = new OracleCommand(CreateSQLStatement(2),conn);
cmd3.CommandType=CommandType.Text;
cmd3.Prepare();
//----------------------
for(i=0;i<NoOfExecution;i++)
{
OracleParameter param1 = new OracleParameter(); param1.ParameterName="param1"; param1.OracleDbType=OracleDbType.Varchar2; OracleParameter param2 = new OracleParameter(); param2.ParameterName="param2"; param2.OracleDbType=OracleDbType.Int32; param1.Value=i.ToString(); param2.Value=i.ToString(); switch(i%3) { case 0: { cmd1.Parameters.Add(param1); cmd1.Parameters.Add(param2); cmd1.ExecuteScalar(); break; } case 1: { cmd2.Parameters.Add(param1); cmd2.Parameters.Add(param2); cmd2.ExecuteScalar(); break; } case 2: { cmd3.Parameters.Add(param1); cmd3.Parameters.Add(param2); cmd3.ExecuteScalar(); break; } }
why the ODP OracleCOmmand doesn't allow me to reuse command object
Same code i have tried with NDP (.net Data provider for oracle) It works fine and SQL trace shows that each Query got Parsed only once and execute n times.
Suggest me if i am missing something in case of ODP.
Option 2.
I have increase the SESSION_CACHED_CURSORS size , as it helps for soft parse, But the SQL TRACE shows it got parsed n times. Here is the code cmd=new OracleCommand("ALTER SESSION SET SESSION_CACHED_CURSORS=1000",conn); cmd.Prepare(); cmd.ExecuteScalar(); It dosn't hepls, tell me the wright way to do it.Received on Thu Feb 23 2006 - 07:28:41 CST