Sybase stored procedure call

I have a strange behavior when call a sybase stored procedure.
Basically, I need to call it three times, each time with different first parameter
value. The first two times are ok, but the last time I got the following error
-------------- error --------------------------------------
------> ap_etsp_insert_deal_component WORKED!!!!!!
------> ap_etsp_upd_price_def WORKED!!!!!!
------> ap_etsp_upd_price_def 4 WORKED!!!!!!
java.sql.SQLException: JZ0SA: Prepared Statement: Input parameter not set, index:
0.
at com.sybase.jdbc.ErrorMessage.raiseError(ErrorMessage.java)
at com.sybase.tds.TdsParam.prepareForSend(TdsParam.java)
at com.sybase.jdbc.ParamManager.checkParams(ParamManager.java)
at com.sybase.tds.Tds.rpc(Tds.java)
at com.sybase.jdbc.SybCallableStatement.sendRpc(SybCallableStatement.java)
at com.sybase.jdbc.SybCallableStatement.executeUpdate(SybCallableStatement.java)
at weblogic.jdbc.pool.Statement.executeUpdate(Statement.java:293)
at weblogic.jdbc.rmi.internal.PreparedStatementImpl.executeUpdate(PreparedStatementImpl.java:64)
at weblogic.jdbc.rmi.SerialPreparedStatement.executeUpdate(SerialPreparedStatement.java:58)
at com.bp.eia.server.adapter.EtPhyGasAdapter.saveDeal(EtPhyGasAdapter.java:248)
at com.bp.eia.server.EtPhyGasDealProcessingControllerBean.saveDeal(EtPhyGasDealProcessingControllerBean.java:212
at com.bp.eia.server.EtPhyGasDealProcessingControllerBean.processRawDeal(EtPhyGasDealProcessingControllerBean.ja
va:87)
at com.bp.eia.server.EtPhyGasDealProcessingControllerBean.onMessage(EtPhyGasDealProcessingControllerBean.java:29
3)
at weblogic.ejb20.internal.MDListener.execute(MDListener.java:248)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
2002-03-15 04:56:03 PM:NULL:0:Fatal Error:Application:com.bp.eia.server.EiaAppException:
java.sql.SQLException: JZ0SA: P
repared Statement: Input parameter not set, index: 0.
At the last time, if I set the call string to be without the ?=,
then it is ok.
If I take out the middle call, then it is ok again.
here are the related code
sql = "{? = call etsp.etsp.ap_etde_insert_deal_component(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
stmt = conn.prepareCall(sql);
stmt.setLong(2,dealid);
stmt.setLong(3,dealcompid);
stmt.setLong(4,dd.pointID);
stmt.setLong(5,dd.locCode);
tempDate = new Date(dd.effFrom.getTime());
stmt.setDate(6,tempDate);
tempDate = new Date(dd.effTo.getTime());
stmt.setDate(7,tempDate);
stmt.setLong(8,dd.startHour);
stmt.setLong(9,dd.endHour);
stmt.setLong(10,dd.minQuantity);
stmt.setLong(11,dd.maxQuantity);
stmt.setFloat(12,dd.dealQuantity);
stmt.setFloat(13,dd.nomQuantity);
stmt.setInt(14,dd.dealStatusCode);
stmt.setInt(15,dd.commentID);
stmt.setString(16,"ACKLGM");
// stmt.setString(16,dd.createUserID);
stmt.setFloat(17, dd.price);
stmt.setLong(18,12354);
//stmt.setLong(18,dd.bookID);
stmt.setInt(19,0);
stmt.setLong(20,dd.contractID);
tempDate = new Date(dd.commitmentDate.getTime());
stmt.setDate(21,tempDate);
//stmt.setString(22,dd.linkedCompID);
ret = stmt.executeUpdate();
if(ret == 1)
System.out.println("------> ap_etsp_insert_deal_component WORKED!!!!!!");
else
System.out.println("------> ERROR ap_etsp_insert_deal_component");
stmt.close();
sql = "{? = call etsp.etsp.ap_etsp_upd_price_def(?,?,?,?,?,?,?,?,?,?,?,?)}";
stmt = conn.prepareCall(sql);
stmt.setLong(2,dd.refID);//ref id
stmt.setInt(3,dd.refType);
tempDate = new Date(dd.effFrom.getTime());
stmt.setDate(4,tempDate);
tempDate = new Date(dd.effTo.getTime());
stmt.setDate(5,tempDate);
stmt.setInt(6,dd.tier);
stmt.setLong(7,dd.currencyCode);
stmt.setLong(8,dd.unitOfMeasure);
stmt.setInt(9,dd.tierQuantity);
stmt.setInt(10,dd.priceType);
stmt.setString(11,dd.formula);
stmt.setString(12,dd.deleteHigherTiers);
stmt.setString(13,dd.userID);
ret = stmt.executeUpdate();
if(ret == 1)
System.out.println("------> ap_etsp_upd_price_def WORKED!!!!!!");
else
System.out.println("------>ERROR ap_etsp_upd_price_def");
stmt.close();
sql = "{?=call etsp.etsp.ap_etsp_upd_price_def(?,?,?,?,?,?,?,?,?,?,?,?)}";
stmt = conn.prepareCall(sql);
stmt.setLong(2,4);
stmt.setInt(3,dd.refType);
tempDate = new Date(dd.effFrom.getTime());
stmt.setDate(4,tempDate);
tempDate = new Date(dd.effTo.getTime());
stmt.setDate(5,tempDate);
stmt.setInt(6,dd.tier);
stmt.setLong(7,dd.currencyCode);
stmt.setLong(8,dd.unitOfMeasure);
stmt.setInt(9,dd.tierQuantity);
stmt.setInt(10,dd.priceType);
stmt.setString(11,dd.formula);
stmt.setString(12,dd.deleteHigherTiers);
stmt.setString(13,dd.userID);
ret = stmt.executeUpdate();
if(ret == 1)
System.out.println("------> ap_etsp_upd_price_def 4 WORKED!!!!!!");
else
System.out.println("------>ERROR ap_etsp_upd_price_def");
stmt.close();
sql = "{?=call etsp.etsp.ap_etsp_upd_price_def(?,?,?,?,?,?,?,?,?,?,?,?)}";
CallableStatement tmt = conn.prepareCall(sql);
tmt.setLong(2,5);
tmt.setInt(3,dd.refType);
tempDate = new Date(dd.effFrom.getTime());
tmt.setDate(4,tempDate);
tempDate = new Date(dd.effTo.getTime());
tmt.setDate(5,tempDate);
tmt.setInt(6,dd.tier);
tmt.setLong(7,dd.currencyCode);
tmt.setLong(8,dd.unitOfMeasure);
tmt.setInt(9,dd.tierQuantity);
tmt.setInt(10,dd.priceType);
tmt.setString(11,dd.formula);
tmt.setString(12,dd.deleteHigherTiers);
tmt.setString(13,dd.userID);
stmt.setLong(1,5);
stmt.setInt(2,dd.refType);
tempDate = new Date(dd.effFrom.getTime());
stmt.setDate(3,tempDate);
tempDate = new Date(dd.effTo.getTime());
stmt.setDate(4,tempDate);
stmt.setInt(5,dd.tier);
stmt.setLong(6,dd.currencyCode);
stmt.setLong(7,dd.unitOfMeasure);
stmt.setInt(8,dd.tierQuantity);
stmt.setInt(9,dd.priceType);
stmt.setString(10,dd.formula);
stmt.setString(11,dd.deleteHigherTiers);
stmt.setString(12,dd.userID);
ret = tmt.executeUpdate();
// ret = stmt.getInt(1);
if(ret == 1)
System.out.println("------> ap_etsp_upd_price_def 5 WORKED!!!!!!");
else
System.out.println("------>ERROR ap_etsp_upd_price_def");
------------------------- end of code
can anybody give some ideas?
thanks
I am using jConnect boundled with weblogic 6.1
BTW, when I make a clearStatement() call on the callable statement, it say the
driver does not support the call.

CallableStatement is and interface and a subclass of PreparedStatement, and holds (a part of) the JDBC-specification behind
which
Dynamische SQL is called. The question marks are placeholders for the parameters, like you would use them in Dynamic SQL with
Open
Client.
This is not necessarily a jConnect problem, jConnect, as you know just implements the JDBC specificatie for our DB's. The
question is if
jConnect does not follow the JDBC specification.
I started to search with the of Sun of ~all~ paramaters with a java.sql.CallableStatement.executeQuery() have to be set, before
you
can call the method. Our implementation (jConnect) apparently thinks so, otherwise it would not give this error message:
java.sql.SQLException: JZ0SA: Prepared Statement: Input parameter not
set, Index: 2
Too bad the JDBC documentation did not give enough information if this is indeed.
(http://java.sun.com/j2se/1.3/docs/guide/jdbc/index.html), say that you need to set all parameters first with a XXXset method
before you can
call the executeQuery()?
I think this is the case
If the you needs to use the invocation "call MY_TEST (?, ?)"
with two parameters, you must then provide two values. If you does only
have one, you may use NULL for the second parameter by calling
cmstmt.setNull(2, Types.INT);
The second parameter will then be set to NULL explicitly.
let me also point out that this is behavior of the dataserver which will
happen with jConnect, OpenClient, and isql. There is a lengthy
explanation in the Transact-SQL User's Guide:
http://manuals.sybase.com:80/onlinebooks/group-as/asg1200e/asesqlug/@Generic__BookTextView/48882;pt=48483/*#X
which begins as follows:
Default Parameters
You can assign a default value for the parameter in the create procedure
statement. This value, which can be any constant, is taken as the argument
to the procedure if the user does not supply one.
So if the user wishes that the server uses the default value for the second
parameter it is imperatively necessary to invoke the procedure with only one
parameter value:
cstmt = conn.prepareCall("{call MYTEST(?)}");
Hope it help, Niclas
PS: install the latest patch from www.sybase.com is god anyway.
x zhou wrote:
I am having the same error when I use the jdbc driver jConnect_5-5 from sybase.
Thanks
Joseph Weinstein <[email protected]> wrote:
Hi. When you call the same stored procedure multiple times you should
keep and re-use the same prepared statement. Nevertheless, this should
work. I assume you're getting a connection via our pool. This means the
repeat prepared statement is being cached, so when you call for a new
one
with the same SQL as before, you're actually re-using the first one that
we cached. This seems to show a bug in the Sybase driver, to do with
re-using
prepared statements. Please download the very latest driver from sybase
and put it ahead of our stuff in the server class path, because this
may well
be a bug Sybase fixed after we put their driver in our package.
Joe
x zhou wrote:
I have a strange behavior when call a sybase stored procedure.
Basically, I need to call it three times, each time with differentfirst parameter
value. The first two times are ok, but the last time I got the followingerror
-------------- error --------------------------------------
------> ap_etsp_insert_deal_component WORKED!!!!!!
------> ap_etsp_upd_price_def WORKED!!!!!!
------> ap_etsp_upd_price_def 4 WORKED!!!!!!
java.sql.SQLException: JZ0SA: Prepared Statement: Input parameter notset, index:
0.
at com.sybase.jdbc.ErrorMessage.raiseError(ErrorMessage.java)
at com.sybase.tds.TdsParam.prepareForSend(TdsParam.java)
at com.sybase.jdbc.ParamManager.checkParams(ParamManager.java)
at com.sybase.tds.Tds.rpc(Tds.java)
at com.sybase.jdbc.SybCallableStatement.sendRpc(SybCallableStatement.java)
at com.sybase.jdbc.SybCallableStatement.executeUpdate(SybCallableStatement.java)
at weblogic.jdbc.pool.Statement.executeUpdate(Statement.java:293)
at weblogic.jdbc.rmi.internal.PreparedStatementImpl.executeUpdate(PreparedStatementImpl.java:64)
at weblogic.jdbc.rmi.SerialPreparedStatement.executeUpdate(SerialPreparedStatement.java:58)
at com.bp.eia.server.adapter.EtPhyGasAdapter.saveDeal(EtPhyGasAdapter.java:248)
at com.bp.eia.server.EtPhyGasDealProcessingControllerBean.saveDeal(EtPhyGasDealProcessingControllerBean.java:212
at com.bp.eia.server.EtPhyGasDealProcessingControllerBean.processRawDeal(EtPhyGasDealProcessingControllerBean.ja
va:87)
at com.bp.eia.server.EtPhyGasDealProcessingControllerBean.onMessage(EtPhyGasDealProcessingControllerBean.java:29
3)
at weblogic.ejb20.internal.MDListener.execute(MDListener.java:248)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
2002-03-15 04:56:03 PM:NULL:0:Fatal Error:Application:com.bp.eia.server.EiaAppException:
java.sql.SQLException: JZ0SA: P
repared Statement: Input parameter not set, index: 0.
At the last time, if I set the call string to be without the ?=,
then it is ok.
If I take out the middle call, then it is ok again.
here are the related code
sql = "{? = call etsp.etsp.ap_etde_insert_deal_component(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
stmt = conn.prepareCall(sql);
stmt.setLong(2,dealid);
stmt.setLong(3,dealcompid);
stmt.setLong(4,dd.pointID);
stmt.setLong(5,dd.locCode);
tempDate = new Date(dd.effFrom.getTime());
stmt.setDate(6,tempDate);
tempDate = new Date(dd.effTo.getTime());
stmt.setDate(7,tempDate);
stmt.setLong(8,dd.startHour);
stmt.setLong(9,dd.endHour);
stmt.setLong(10,dd.minQuantity);
stmt.setLong(11,dd.maxQuantity);
stmt.setFloat(12,dd.dealQuantity);
stmt.setFloat(13,dd.nomQuantity);
stmt.setInt(14,dd.dealStatusCode);
stmt.setInt(15,dd.commentID);
stmt.setString(16,"ACKLGM");
// stmt.setString(16,dd.createUserID);
stmt.setFloat(17, dd.price);
stmt.setLong(18,12354);
//stmt.setLong(18,dd.bookID);
stmt.setInt(19,0);
stmt.setLong(20,dd.contractID);
tempDate = new Date(dd.commitmentDate.getTime());
stmt.setDate(21,tempDate);
//stmt.setString(22,dd.linkedCompID);
ret = stmt.executeUpdate();
if(ret == 1)
System.out.println("------> ap_etsp_insert_deal_componentWORKED!!!!!!");
else
System.out.println("------> ERROR ap_etsp_insert_deal_component");
stmt.close();
sql = "{? = call etsp.etsp.ap_etsp_upd_price_def(?,?,?,?,?,?,?,?,?,?,?,?)}";
stmt = conn.prepareCall(sql);
stmt.setLong(2,dd.refID);//ref id
stmt.setInt(3,dd.refType);
tempDate = new Date(dd.effFrom.getTime());
stmt.setDate(4,tempDate);
tempDate = new Date(dd.effTo.getTime());
stmt.setDate(5,tempDate);
stmt.setInt(6,dd.tier);
stmt.setLong(7,dd.currencyCode);
stmt.setLong(8,dd.unitOfMeasure);
stmt.setInt(9,dd.tierQuantity);
stmt.setInt(10,dd.priceType);
stmt.setString(11,dd.formula);
stmt.setString(12,dd.deleteHigherTiers);
stmt.setString(13,dd.userID);
ret = stmt.executeUpdate();
if(ret == 1)
System.out.println("------> ap_etsp_upd_price_def WORKED!!!!!!");
else
System.out.println("------>ERROR ap_etsp_upd_price_def");
stmt.close();
sql = "{?=call etsp.etsp.ap_etsp_upd_price_def(?,?,?,?,?,?,?,?,?,?,?,?)}";
stmt = conn.prepareCall(sql);
stmt.setLong(2,4);
stmt.setInt(3,dd.refType);
tempDate = new Date(dd.effFrom.getTime());
stmt.setDate(4,tempDate);
tempDate = new Date(dd.effTo.getTime());
stmt.setDate(5,tempDate);
stmt.setInt(6,dd.tier);
stmt.setLong(7,dd.currencyCode);
stmt.setLong(8,dd.unitOfMeasure);
stmt.setInt(9,dd.tierQuantity);
stmt.setInt(10,dd.priceType);
stmt.setString(11,dd.formula);
stmt.setString(12,dd.deleteHigherTiers);
stmt.setString(13,dd.userID);
ret = stmt.executeUpdate();
if(ret == 1)
System.out.println("------> ap_etsp_upd_price_def 4WORKED!!!!!!");
else
System.out.println("------>ERROR ap_etsp_upd_price_def");
stmt.close();
sql = "{?=call etsp.etsp.ap_etsp_upd_price_def(?,?,?,?,?,?,?,?,?,?,?,?)}";
CallableStatement tmt = conn.prepareCall(sql);
tmt.setLong(2,5);
tmt.setInt(3,dd.refType);
tempDate = new Date(dd.effFrom.getTime());
tmt.setDate(4,tempDate);
tempDate = new Date(dd.effTo.getTime());
tmt.setDate(5,tempDate);
tmt.setInt(6,dd.tier);
tmt.setLong(7,dd.currencyCode);
tmt.setLong(8,dd.unitOfMeasure);
tmt.setInt(9,dd.tierQuantity);
tmt.setInt(10,dd.priceType);
tmt.setString(11,dd.formula);
tmt.setString(12,dd.deleteHigherTiers);
tmt.setString(13,dd.userID);
stmt.setLong(1,5);
stmt.setInt(2,dd.refType);
tempDate = new Date(dd.effFrom.getTime());
stmt.setDate(3,tempDate);
tempDate = new Date(dd.effTo.getTime());
stmt.setDate(4,tempDate);
stmt.setInt(5,dd.tier);
stmt.setLong(6,dd.currencyCode);
stmt.setLong(7,dd.unitOfMeasure);
stmt.setInt(8,dd.tierQuantity);
stmt.setInt(9,dd.priceType);
stmt.setString(10,dd.formula);
stmt.setString(11,dd.deleteHigherTiers);
stmt.setString(12,dd.userID);
ret = tmt.executeUpdate();
// ret = stmt.getInt(1);
if(ret == 1)
System.out.println("------> ap_etsp_upd_price_def 5WORKED!!!!!!");
else
System.out.println("------>ERROR ap_etsp_upd_price_def");
------------------------- end of code
can anybody give some ideas?
thanks
I am using jConnect boundled with weblogic 6.1
BTW, when I make a clearStatement() call on the callable statement,it say the
driver does not support the call.

Similar Messages

  • Remote Stored Procedure Call Dispatcher WEB WERVICE

    Hello all,
    Environment: Windows OS, Oracle 10g, mod_plsql
    I am looking for solutions to the following problem:
    A way to dispatch calls to stored procedures from client to server with a minimal impact on performance.
    We are looking at two possible solutions:
    1) Making a call to a Remote Stored Procedure Call Dispatcher (RSPCDispatcher) stored procedure through mod_plsql.
    2) Making a call to a Remote Stored Procedure Call Dispatcher (RSPCDispatcher) stored procedure through a web service.
    Solution 1) is not the preferred one as you may already know that mod_plsql will not be supported starting 12g.
    Solution 2) is the one we prefer as we believe that web services will be ever more supported in the future. When we move to 11g we may turn this web service into a native one (avoiding overhead in the OC4J for hosting the web service etc.).
    We are looking for code examples and information pointers of how we could implement this dispatcher as a stored procedure in a DB package. We know that the implementation should be similar to the one done for mod_plsql in the OWA schema but the code there is obfuscated, so we could not borrow ideas from there.
    We are not sure how to deal with the generalization of the above stated problem. We need to be able to pass to this dispatcher the stored procedure package and name we are invoking, ordered list of parameters (or parameters map), and the transport strategy (XML, JSON, etc.).
    Basically, we are notsure how to deal with the USING clause of the EXECUTE IMMEDIATE statement. We can dynamically generate the SQL statement corresponding to the stored procedure we want to call, but we are not sure how to bind the parameters we are passing?
    Also, we know that EXECUTE IMMEDIATE may be slow sometimes. So if could avoid it, this could further improve performance.
    Perhaps the run-time generalized stored procedure execution may not be what we are looking for?! Perhaps we should include several design-time steps?! What about a script that given a package name (or just a single stored procedure) would generate a wrapper package which stored procudures' names would correspond to their respective counterparts in the given package which would take two parameters - the list of parameters in some sort of format, and the transport (content delivery strategy) and would return the result in the given content delivery strategy?! This script may also define the XSD of the XML message a stored procedure is called with (the parameter map) as well as the XSD of the XML result the stored procedure returns. Also the script could generate client code with the given language strategy (Java, .NET, etc.) for calling the RSPCDispatcher web service.
    We request the following from the Oracle community folks:
    a) Please, give us any relevant information that could be helpful to resolve this problem.
    b) Any resource of how to inspect stored procedures in a package, its parameters, parameter types and direction (IN, OUT, or INOUT), etc.
    Thank you very much in advance.
    Regards,
    Georgi

    Hello all,
    Environment: Windows OS, Oracle 10g, mod_plsql
    I am looking for solutions to the following problem:
    A way to dispatch calls to stored procedures from client to server with a minimal impact on performance.
    We are looking at two possible solutions:
    1) Making a call to a Remote Stored Procedure Call Dispatcher (RSPCDispatcher) stored procedure through mod_plsql.
    2) Making a call to a Remote Stored Procedure Call Dispatcher (RSPCDispatcher) stored procedure through a web service.
    Solution 1) is not the preferred one as you may already know that mod_plsql will not be supported starting 12g.
    Solution 2) is the one we prefer as we believe that web services will be ever more supported in the future. When we move to 11g we may turn this web service into a native one (avoiding overhead in the OC4J for hosting the web service etc.).
    We are looking for code examples and information pointers of how we could implement this dispatcher as a stored procedure in a DB package. We know that the implementation should be similar to the one done for mod_plsql in the OWA schema but the code there is obfuscated, so we could not borrow ideas from there.
    We are not sure how to deal with the generalization of the above stated problem. We need to be able to pass to this dispatcher the stored procedure package and name we are invoking, ordered list of parameters (or parameters map), and the transport strategy (XML, JSON, etc.).
    Basically, we are notsure how to deal with the USING clause of the EXECUTE IMMEDIATE statement. We can dynamically generate the SQL statement corresponding to the stored procedure we want to call, but we are not sure how to bind the parameters we are passing?
    Also, we know that EXECUTE IMMEDIATE may be slow sometimes. So if could avoid it, this could further improve performance.
    Perhaps the run-time generalized stored procedure execution may not be what we are looking for?! Perhaps we should include several design-time steps?! What about a script that given a package name (or just a single stored procedure) would generate a wrapper package which stored procudures' names would correspond to their respective counterparts in the given package which would take two parameters - the list of parameters in some sort of format, and the transport (content delivery strategy) and would return the result in the given content delivery strategy?! This script may also define the XSD of the XML message a stored procedure is called with (the parameter map) as well as the XSD of the XML result the stored procedure returns. Also the script could generate client code with the given language strategy (Java, .NET, etc.) for calling the RSPCDispatcher web service.
    We request the following from the Oracle community folks:
    a) Please, give us any relevant information that could be helpful to resolve this problem.
    b) Any resource of how to inspect stored procedures in a package, its parameters, parameter types and direction (IN, OUT, or INOUT), etc.
    Thank you very much in advance.
    Regards,
    Georgi

  • DML visibility in stored procedures called via JDBC

    Hello,
    I have two stored procedures, A and B. Proc A inserts Q into table X. Proc B selects Q from table X to insert it into table Y. Neither procedure does a COMMIT.
    My Java class executes Proc A and then Proc B within a transaction (autocommit is false). But Proc B fails to select Q from table X with the No Data Found error, apparently unable to see the recently inserted Q.
    If these two procedures are called from a SQL*Plus block, everything succeeds.
    Does anyone have a clue about what I am missing? All my DML should be visible to my session.
    Thank you in advance for any suggestions.
    - CJ

    Thank you, Joe, for your reply!
    To the best of my knowledge, all of my stored procedure calls are being made from the same connection so I can rollback everything if necessary. I have not explicitly closed the connection between calls. The debugger indicates my connection session id never changes across calls.
    Do you know of any JDBC trace tools that might help me verify my connections? I've enabled logging with oracle.jdbc.driver.OracleLog.setTrace(true) but it doesn't really give me specific connection information - at least not that I can tell. :)
    Thanks!
    Cori

  • How to use Stored Procedure Call in Sender JDBC adapter

    Hi All,
             Could someone send me a blog on how to use Stored Procedure call in Sender JDBC adapter?
    Xier

    Hi Xler
    refer these links
    /people/yining.mao/blog/2006/09/13/tips-and-tutorial-for-sender-jdbc-adapter
    http://help.sap.com/saphelp_nw04/helpdata/en/2e/96fd3f2d14e869e10000000a155106/content.htm
    Also, you can check Sriram's blog for executing Stored Procedures,
    /people/sriram.vasudevan3/blog/2005/02/14/calling-stored-procs-in-maxdb-using-sap-xi
    /people/jegathees.waran/blog/2007/03/02/oracle-table-functions-and-jdbc-sender-adapter
    This blog might be helpfull on stored procedures for JDBC
    JDBC Stored Procedures
    /people/siva.maranani/blog/2005/05/21/jdbc-stored-procedures
    Please go through these threads and see if it helps...
    Re: How to execute Stored Procedure?
    Re: Problem with JDBC stored procedure
    Thnaks !!

  • Date/Time Format Stored Procedure Calls in ADVANCE MODE in JDBC ADAPTER

    Hi Experts,
    What is significance of Date/Time Format Stored Procedure Calls in ADVANCE MODE in JDBC ADAPTER.
    Thanks,
    ABDUR

    I guess this would be applicable for the folowing formats - DATE, TIME, TIMESTAMP.
    This is the correct link
    http://help.sap.com/saphelp_nw04/helpdata/en/64/ce4e886334ec4ea7c2712e11cc567c/content.htm
    Regards,
    Prateek

  • Stored Procedure call from JDBC sender for Oracle Database

    Hi,
    I have a requirement to call stored procedure using JDBC sender adapter for retriving data from an Oracle database.
    I need to execute first stored procedure call from Querry SQL statement and then trigger second stored procedure call for confirming the succesful retrival of those records from the update SQL statement.
    Querries:
    1. Can we trigger stored procedure from Update statement of JDBC sender.
    2. Can we call stored procedure from Querry statement, since I have read on other sdn threads that stored procedure calls on Oracle database are not allowed. If not possible to have "Execute stored procedure" would the function call (select * from table(function name)) work same as stored procedure.
    3. In a JDBC sender the Querry statement and Update statement are executed in same session call and same database connection. What happens if the querry statement was not succesful, would the update be still triggered.
    Please note PI does not have direct access to main table and hence the need to have separate stored procedure calls.
    The PI version is PI 7.11 sp4.
    Appreciate your inputs.
    Thanks.
    Siddhesh S.Tawate

    >1. Can we trigger stored procedure from Update statement of JDBC sender.
    I think not possible using update statement.
    > Can we call stored procedure from Querry statement, since I have read on other sdn threads that stored procedure calls on Oracle database are not allowed. If not possible to have "Execute stored procedure" would the function call (select * from table(function name)) work same as stored procedure.
    Yes using select query you can call stored procedure.
    >. In a JDBC sender the Querry statement and Update statement are executed in same session call and same database connection. What happens if the querry statement was not succesful, would the update be still triggered.
    No select and update handles in the same session using the same thread so if one transaction fails update should not proceed.

  • Execution Times of Stored Procedures Called from Other Stored Procedures

    If I execute sys.dm_exec_procedure_stats, it will produce execution times of my stored procedures executed recently.
    However, stored procedures called from other stored procedures do not show up.
    Is there code that can return the execution times of stored procedures even though they are called from other stored procedures.

    Look at the example. It is counting nested execution.
    CREATE PROC z1SP AS SELECT * FROM Production.Product;
    GO
    CREATE PROC z2SP AS SELECT * FROM Production.Product WHERE Color is not null; EXEC z1SP;
    GO
    SELECT object_name(2002822197), object_name(2034822311);
    --z1SP z2SP
    EXEC z1SP; EXEC z2SP;
    GO 10
    SELECT * from sys.dm_exec_procedure_stats
    database_id object_id type type_desc cached_time last_execution_time execution_count
    16 2002822197 P SQL_STORED_PROCEDURE 2014-12-16 13:02:45.170 2014-12-16 13:02:46.717 20
    16 2034822311 P SQL_STORED_PROCEDURE 2014-12-16 13:02:45.460 2014-12-16 13:02:46.687 10
    Kalman Toth Database & OLAP Architect
    SQL Server 2014 Database Design
    New Book / Kindle: Beginner Database Design & SQL Programming Using Microsoft SQL Server 2014

  • Structure for Stored Procedure Call

    Hi All,
             Guys I am trying to call a stored procedure call using receiver jdbc adapter...
    This is the outgoing message:
    <b><?xml version="1.0" encoding="UTF-8" ?>
    - <ns0:SP_DB xmlns:ns0="urn:sce-com:xi:dev:mohammf">
    - <Test>
    - <PP_TEST_P action="EXECUTE">
      <table>PP_TEST_P</table>
      <RECTYPEIND type="CHAR">CC</RECTYPEIND>
      <JENUMBER type="CHAR">76724</JENUMBER>
      <COMPANY type="CHAR">BCEO</COMPANY>
      <CONSTANT1 type="CHAR">AB</CONSTANT1>
      <SYSTEMDATE type="CHAR">08/12/2007</SYSTEMDATE>
      <DR_CR_ID type="CHAR">0</DR_CR_ID>
      <AMOUNT type="CHAR">934928599475843</AMOUNT>
      <MONTH_NUMBER type="CHAR">000008</MONTH_NUMBER>
      <COST_CENTER type="CHAR">LosAngeles</COST_CENTER>
      <ORDERNO type="CHAR">694950375830</ORDERNO>
      <WBS type="CHAR">Southern California Edis</WBS>
      <ACCOUNTID type="CHAR">6949503758</ACCOUNTID>
      <BATCH_ID type="CHAR">3408102007</BATCH_ID>
      <ASSIGNMENT type="CHAR">Technology Solutio</ASSIGNMENT>
      <GL_JOURNAL_CATEGORY type="CHAR">GHTF</GL_JOURNAL_CATEGORY>
      <PROFIT_CENTER type="CHAR">3434694950</PROFIT_CENTER>
      <REFDOCNUMBER type="CHAR">00000000004304300056006056</REFDOCNUMBER>
      </PP_TEST_P>
    - <PP_TEST_P action="EXECUTE">
      <table>PP_TEST_P</table>
      <RECTYPEIND type="CHAR">XX</RECTYPEIND>
      <JENUMBER type="CHAR">76724</JENUMBER>
      <COMPANY type="CHAR">BCEO</COMPANY>
      <CONSTANT1 type="CHAR">AB</CONSTANT1>
      <SYSTEMDATE type="CHAR">08/12/2007</SYSTEMDATE>
      <DR_CR_ID type="CHAR">0</DR_CR_ID>
      <AMOUNT type="CHAR">934928599475843</AMOUNT>
      <MONTH_NUMBER type="CHAR">000008</MONTH_NUMBER>
      <COST_CENTER type="CHAR">LosAngeles</COST_CENTER>
      <ORDERNO type="CHAR">694950375830</ORDERNO>
      <WBS type="CHAR">Southern California Edis</WBS>
      <ACCOUNTID type="CHAR">6949503758</ACCOUNTID>
      <BATCH_ID type="CHAR">3408102007</BATCH_ID>
      <ASSIGNMENT type="CHAR">Technology Solutio</ASSIGNMENT>
      <GL_JOURNAL_CATEGORY type="CHAR">GHTF</GL_JOURNAL_CATEGORY>
      <PROFIT_CENTER type="CHAR">3434694950</PROFIT_CENTER>
      <REFDOCNUMBER type="CHAR">00000000004304300056006056</REFDOCNUMBER>
      </PP_TEST_P>
      </Test>
      </ns0:SP_DB></b>
    The error I am getting is: 
    <b><i>2007-08-20 09:44:05 Error Unable to execute statement for table or stored procedure. 'PP_TEST_P' (Structure 'Test') due to java.sql.SQLException: ERROR: Invalid XML document format for stored procedure: 'type="<SQL-type>"' attribute is missing for element 'table' (Setting a SQL-type (e.g. INTEGER, CHAR, DATE etc.) is mandatory !)
    2007-08-20 09:44:05 Error JDBC message processing failed; reason Error processing request in sax parser: Error when executing statement for table/stored proc. 'PP_TEST_P' (structure 'Test'): java.sql.SQLException: ERROR: Invalid XML document format for stored procedure: 'type="<SQL-type>"' attribute is missing for element 'table' (Setting a SQL-type (e.g. INTEGER, CHAR, DATE etc.) is mandatory !)
    2007-08-20 09:44:05 Error MP: Exception caught with cause com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'PP_TEST_P' (structure 'Test'): java.sql.SQLException: ERROR: Invalid XML document format for stored procedure: 'type="<SQL-type>"' attribute is missing for element 'table' (Setting a SQL-type (e.g. INTEGER, CHAR, DATE etc.) is mandatory !)
    2007-08-20 09:44:05 Error Exception caught by adapter framework: null
    2007-08-20 09:44:05 Error Delivery of the message to the application using connection JDBC_http://sap.com/xi/XI/System failed, due to: com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'PP_TEST_P' (structure 'Test'): java.sql.SQLException: ERROR: Invalid XML document format for stored procedure: 'type="<SQL-type>"' attribute is missing for element 'table' (Setting a SQL-type (e.g. INTEGER, CHAR, DATE etc.) is mandatory !).</i></b>
    Pls advice..
    XIer
    Message was edited by:
            XIer

    Hi,
    Check your DATA TYPE attributes with the attributes of the column names in the Database table.  There is a mismatch between the DT and Table in the database.
    <b>Cheers,
    *RAJ*</b>

  • Response from one stored proc. to another stored procedure call in JDBC

    Hi,
    I have to call 2 stored procedures, where the response from first stored procedure ( an id) is mapped as a parameter to the second stored procedure call.
    My question is that can this be achieved without using BPM?
    Can we somehow map the response from the stored procedure 1 to stored procedure 2 parameter w/o using BPM?
    I have to insert multiple rows using the stored procedure.
    Should I use STATEMENT unbounded times ( which means stored procedure is called multiple times) or should I use the parameter as unbounded ( like an array, maybe define the parameter as an array in the stored procedure)?
    From the performance standpoint, which approach is better?
    Please suggest.

    Hi Ardent !
    I think you could use 2 mapping programs (message mapping objects) in your interface mapping. The first one, executes and returns the ID to a message type defined by you for internal use only between both stored procedure executions. The second ones uses that message type as source message and the XML required by the JDBC for the second stored procedure execution as target message type. This can be done without BPM.
    Regards,
    Matias.

  • Stored Procedure Call with only Input Parameter

    Hi, The Example at Oracle Toplink Developer's Guide, Volume 5 uses an output param named IS_VALID. How Can I Call a Stored Procedure that has only Input Param ? If I don't use an Ouput Param Toplink throw the following Exception:
    *Excepción [TOPLINK-4002]* (Oracle TopLink - 10g Release 3 (10.1.3.3.0) (Build 070620)): oracle.toplink.exceptions.DatabaseException Excepción Interna: java.sql.SQLException: ORA-00900: invalid SQL statement
    Here's the Sample Code Depicted at the Guide:*
    Example 98–48 Stored Procedure Call with an Output Parameter
    StoredProcedureCall call = new StoredProcedureCall();
    call.setProcedureName("CHECK_VALID_POSTAL_CODE");
    call.addNamedArgument("POSTAL_CODE");
    call.addNamedOutputArgument(
    "IS_VALID", // procedure parameter name
    "IS_VALID", // out argument field name
    Integer.class // Java type corresponding to type returned by procedure
    ValueReadQuery query = new ValueReadQuery();
    query.setCall(call);
    query.addArgument("POSTAL_CODE");
    Vector parameters = new Vector();
    parameters.addElement("L5J1H5");
    Number isValid = (Number) session.executeQuery(query,parameters);
    Here's my code
    StoredProcedureCall call = new StoredProcedureCall();
         call.setProcedureName("MYSTOREDPROCEDURE");
         call.addNamedArgument("INPUTPARAM1");
         call.addNamedArgument("INPUTPARAM2");
         call.addNamedArgument("INPUTPARAM3");
         call.addNamedArgument("INPUTPARAM4");
         call.addNamedArgument("INPUTPARAM5");
         call.addNamedArgument("INPUTPARAM6");
         ValueReadQuery query = new ValueReadQuery();
         query.setCall(call);
         query.addArgument("INPUTPARAM1");
         query.addArgument("INPUTPARAM2");
         query.addArgument("INPUTPARAM3");
         query.addArgument("INPUTPARAM4");
         query.addArgument("INPUTPARAM5");
         query.addArgument("INPUTPARAM6");
    Vector parameters = new Vector();
         parameters.addElement("INPUTVALUE1");
         parameters.addElement("INPUTVALUE2");
         parameters.addElement("INPUTVALUE3");
         parameters.addElement("INPUTVALUE4");
         parameters.addElement("INPUTVALUE5");
         parameters.addElement("INPUTVALUE6");
         uow.executeQuery(query,parameters);
    Regards,
    Manuel

    You need to use a DataModifyQuery as your query does not return anything.
    James : http://www.eclipselink.org

  • Stored Procedure call to Oracle - issue

    hi ,
    I am trying to call a receiver JDBC adapter to call an oracle stored procedure -
    I got this error ->
    java.sql.SQLException: ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call  - which I understand is related to mismatch btw the XML and Stored procedure
    I checked the XMl and it matches the stored procedure call.  I have two specific questions -
    1) I have used SAP Note 801367 to have  a look at the SQl command sent to the db.. However I do not see the stored procedure in the Audit logs...Does this feature work for Stored procedures too?
    2) Can you look at the XML sent to the JDBC adapter...I saw something wierd... even though I had declared the isOutput attribute first and then attribute type... when I  loaded the MT into the mapping the order changed...Does than matter?
      <customer_id isInput="true" type="VARCHAR">5000123</customer_id>
      <product_id isInput="true" type="VARCHAR">0041003</product_id>
      <serial_number isInput="true" type="VARCHAR">1</serial_number>
      <effective_date isInput="true" type="VARCHAR">2010-03-16</effective_date>
      <quantity isInput="true" type="NUMERIC">1.000</quantity>
      <currency_code isInput="true" type="VARCHAR">USD</currency_code>
      <dist_channel_id isInput="true" type="VARCHAR">11</dist_channel_id>
      <division_id isInput="true" type="VARCHAR">04</division_id>
      <org_unit_id isInput="true" type="VARCHAR">1005</org_unit_id>
      <config_name isInput="true" type="VARCHAR" />
      <resolved_price type="NUMERIC" isOutput="true" />
      <resolved_currency type="VARCHAR" isOutput="true" />
      <contract_id type="VARCHAR" isOutput="true" />
      <contract_desc type="VARCHAR" isOutput="true" />
      <contract_owner_id type="VARCHAR" isOutput="true" />
      <payment_terms type="VARCHAR" isOutput="true" />
      <product_group_id type="VARCHAR" isOutput="true" />
      <commitment_id type="VARCHAR" isOutput="true" />
      <tier_index type="VARCHAR" isOutput="true" />
      <shipping_flag type="VARCHAR" isOutput="true" />
      <result_code type="VARCHAR" isOutput="true" />
      <exec_time type="NUMERIC" isOutput="true" />
    java.sql.SQLException: ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call

    Arvind,
    Just to be sure: are all inputs to yourstored procedure of type varchar, or are there maybe inputs with different types?
    A mismatch between the type specified in the XML and the expected inputs of the SP can also cause this error.
    Regards,
    Koen

  • Stored procedure call returns null result set when using temp table in sp!

    Here's a really odd problem...
    SQL Server stored procedure called sp_Test takes 1 input INT. Here is the code I call it with
    cStmt = connection.prepareCall("{call sp_Test(?)}");
    cStmt.setInt(1, 44);
    cStmt.execute();
    rs = cStmt.getResultSet();When the body of the stored proc is
    CREATE PROCEDURE sp_Test(@i_NodeID INT)
    AS
    BEGIN
      SELECT node_id FROM tbl_NavTree
    END
    GOthe query works and I get all node_id back in rs
    BUT when the body of the stored proc is
    CREATE PROCEDURE sp_Test(@i_NodeID INT)
    AS
    BEGIN
      CREATE TABLE #Descendants(
        descendant_id INT
      SELECT node_id FROM tbl_NavTree
      DROP TABLE #Descendants
    END
    GOThe rs comes back as NULL. Really really weird if you ask me. I also tried removing the DROP TABLE line just in case the SELECT had to be the last statement but still NULL.
    Final note is that BOTH the above stored proc bodies work when executed within SQL Server query analyser.
    Must be JDBC .. what can it be!??

    DROP TABLE #DescendantsMS SQL Server - right?
    Then don't drop the table.
    From the MS docs for "create table"
    Local temporary tables are visible only in the current session;
    A local temporary table created in a stored procedure is dropped automatically when the stored procedure completes. The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. The table cannot be referenced by the process which called the stored procedure that created the table.

  • JDBC callableStatement stored procedure call cancellation?

    up vote0down votefavorite
    I have a very complex oracle stored procedure that searches and retrieves some data. The procedure returns an output parameter - an oracle cursor. I execute the procedure by JDBC:
    CallableStatement stmt = conn.prepareCall("{call myprocedure(?,?,?,?}");
    The problem is, the queries can sometimes take quite long (few minutes) and i would like user to be able to cancel the query anytime by clicking button. I have reference to stmt object, but unfortunatelly calling stmt.cancel() (from other thread) has NO EFFECT.
    On the other hand when i change the CallableStatement sql to some query like:
    CallableStatement stmt = conn.prepareCall("select * from all_objects");
    i get "java.sql.SQLTimeoutException: ORA-01013: user requested cancel of current operation" after calling stmt.cancel() - so thats the right reaction.
    Does that mean than i cannot cancel stored procedure call via jdbc, but only simple select statements? Does anyone else had and resolved similar problem?
    I guess i could cancel the query by oracle kill session, but i use connection pooling (jboss) and i have plenty of sessions for the same user existing.
    Database Product Version is Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production JDBC Driver Version is 11.2.0.4.0
    any help will be appreciated.

    This property didnt help, still no reaction after statement.cancel().
    I could not cancel the statment from the db size , so i decided to spawn new java thread and run the statement in that thread, and when user clicks cancel button i just cancel the thread, some snipper of code below:
                   AtomicBoolean userCanceled - this must be AtomicBoolean or  volatile variable, so other threads would see the change of variable after clicking button
                   try{
                    MyCallableQuery callable = new MyCallableQuery(rs,stmt,this,rsh,outParameter);
                    FutureTask<T> queryTask = new FutureTask<T>(callable);
                    ExecutorService executor = Executors.newFixedThreadPool(1);
                    executor.execute(queryTask);                 
                    while  (!queryTask.isDone()){         //stil processing statement            
                     Thread.sleep(100);
                          if (userCanceled)){               //user decided to cancel
                           futureTask1.cancel(true);
                           executor.shutdown();
                           throw new SQLException("User decided to cancel procedure call");
                     result = futureTask1.get(); 
                     //here the code after the resultset has been processed without cancelation
                   catch (SQLException e}{
                   //here the code when user decided to cancel  like clearing the datatable
    and my callable class is like:
    public class MyCallable<T> extends ProcRunner implements Callable<T> {
        private ResultSet rs;
        private CallableStatement stmt;
        private ProcRunner procRunner;
        private ResultSetHandler<T> rsh;
        private Integer outParameter;
        public MyCallable(ResultSet rs,CallableStatement stmt,ProcRunner procRunner,ResultSetHandler<T> rsh,Integer outParameter){
            this.rs = rs;
            this.stmt = stmt;
            this.procRunner = procRunner;
            this.rsh = rsh;
            this.outParameter = outParameter;
        @Override
        public T call() throws Exception {
           T result = null;     
          stmt.executeUpdate();
           rs = (ResultSet) stmt.getObject(outParameter);
           rs = this.wrap(rs);
           result = rsh.handle(rs);  
        return result;

  • WCF OData Service stored procedure call generates "Operation could destabilize the runtime" error with $select option

    I've been trying to call a stored procedure through Entity Framework and WCF Data Services (OData). It returns an entity not a complex type. Following walkthroughs found all over the web, I came up with this code inside my service:
    [WebGet]
    public IQueryable<Entity> GetEntitiesByParameterId(int parameterId)
    return CurrentDataSource.GetEntitiesByParameterId(parameterId).AsQueryable();
    Calling the proc this way: ~WcfService.svc/GetEntitiesByParameterId?parameterId=1 executes
    the stored procedure and returns entities that should be returned. No problem there.
    Everything works well until I try to use $select OData option ie. ~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$select=name.
    Upon debugging, the method above runs without any error but it returns an Operation could destabilize the runtime error upon reaching the
    client. After so much research, apparently it is a very general error pointing to a lot of different causes. I haven't found one that really matches my particular problem. Closest are 
    http://stackoverflow.com/questions/378895/operation-could-destabilize-the-runtime
    https://social.msdn.microsoft.com/Forums/en-US/d2fb4767-dc09-4879-a62a-5b2ce96c4465/for-some-columns-entity-properties-executestorequery-failed-with-error-operation-could?forum=adodotnetdataservices 
    but none of the solutions worked on my end.
    Also, from the second article above:
    This is a known limitation of WCF DS. ...
    Second is that some of the queries won't work correctly because LINQ to EF needs little different LINQ expressions than LINQ to Objects in some cases. Which is the problem you're seeing.
    It has been posted on 2012. If it its true, are there still no updates on this? And is there any other workaround to get the $select working on the stored proc call?
    What works:
    ~WcfService.svc/GetEntitiesByParameterId?parameterId=1
    ~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$top=1
    ~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$skip-5
    ~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$filter={filter query}
    ~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$expand=SomeNavigationProperty
    What doesn't work:
    ~WcfService.svc/GetEntitiesByParameterId?parameterId=1&$select=name
    Tech details:
    EntityFramework 5, WCF Data Service 5.0, OData V3
    *I've also tried upgrading to EF6 and WCF 5.6.2 and it still didn't work.
    Any help would be appreciated. Thanks!

    Someone from SO replied to my question there and said that $select is still not supported though I couldn't find any definitive documentation about it.
    From what I gather and observed, $select breaks the stored procedure call because it tries to alter the data shape already gotten from the database and attempts to return a dynamic entity instead. Something about the stored proc returning an ObjectResult might
    be messing it up. As I have said, these are merely my observations.
    Workaround: I found a simple and elegant workaround for it though. Since my stored procedures are only getting data from the database and does
    not alter data in any way (INSERT, UPDATE, DELETE), I tried using table-valued functions that returns a table equivalent to the entity on my EF. I've found that calling this function on the Service Operation method returns an IQueryable<Entity> which
    is basically what is needed. $select also works now and so does other OData query options.
    Steps:
    Create a function on the database
    Update EDMX -> Add function
    Add new Function Import with Entity return type
    Create service operation in WCF Data Service that calls CurrentDataSource.<FunctionName>()
    Test in fiddler.
    CODES
    Database Function:
    CREATE FUNCTION GetEntities(@parameter)
    RETURN @entites TABLE(
    [Id] [int],
    [Name] [nvarchar](100),
    AS
    BEGIN
    INSERT INTO @entities
    SELECT [Id], [Name], ... FROM [EntityTable]
    RETURN
    END
    WCF:
    [WebGet]
    public IQueryable<Entity> GetEntity(int parameter)
    return CurrentDataSource.GetEntity(parameter);
    It doesn't really solve the stored procedure problem but I'm marking this as answer until someone can provide a better one as it does solve what I'm trying to do.
    Hope this helps others too. :)

  • Too many arguments for stored procedure call

    I have a stored procedure with 34 arguments, including the return value. I am trying to call it from java using JDBC thin drivers (jdk11, oracle815), but I get the "wrong number or types of arguments" error message. JDBC-OCI fails also. I saw a reference in this discussion group to there being a limit of 32 arguments for stored procedure calls from jdbc (posted 6/29/99). Is there such a limit? If so, is there a fix or workaround? If there is not a limit, how can I determine which argument is causing the problem?
    Many thanks.
    Mike
    java.sql.SQLException: ORA-06550: line 1, column 13:
    PLS-00306: wrong number or types of arguments in call to 'PUT_CHECK'
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.jav
    a)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithBatch(OracleStatement
    .java)
    at oracle.jdbc.driver.OracleStatement.doExecute(OracleStatement.java)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStateme
    nt.java)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePrepar
    edStatement.java)
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStat
    ement.java)
    at metris.quickcheck.database.DS1.main(DS1.java:79)
    null

    I must confess I still don't understand your problem. By rows ...
    I have an sql that recodes a column and has 1450 rows. This doesn't work
    although when I use the same with less rows 40-60 it works.... do you mean rows in the table or elements in the CASE() statement ?
    From the 9i SQL Reference:
    " The maximum number of arguments in a CASE expression is 255, and each WHEN ... THEN pair counts as two arguments. To avoid exceeding the limit of 128 choices, you can nest CASE expressions. That is return_expr can itself be a CASE expression."
    According to the 10g docs the limit is the same there.
    Cheers, APC

Maybe you are looking for