JDBC 2.0 call in Oracle 8i problem?

When I use getString() for a VARCHAR2 field to fetch, I am getting junk characters. However this works fine with a column defined as NUMBER. Also it works fine when I use the default conn.createStatement() //without parameters!
Any one came across this before? Any help?
Here is the code snippet...
Connection conn = <db connection>
OracleStatement stmt = (OracleStatement)conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String SQL="select name from customer";
ResultSet rs = stmt.executeQuery(SQL);
while(rs.next())
String s = getString(1);
rs.close();
null

well, in order to have these 2.0 features, the connection to the database
has to stay open.
This is not an efficient way of handling your pooled resources since they
become occupied for longer times.
Instead read in the data to your EJB, and then return the connection to the
pool.
Filip
"Ken" <[email protected]> wrote in message
news:[email protected]..
>
I've configured a DataSource object wrapping a Connection Pool using theurl=jdbc:weblogic:oracle
and driver=weblogic.jdbc.oci.Driver. I've successfully deployed a coupleof EJBs
that utilize this DataSource for data retrieval. However, both of themethods
below throw SQLException similar to those at the end of this post.
sqlStmt = theConnection.prepareStatement(sqlCommand,ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs.absolute(startrow);
java.sql.SQLException: This JDBC 2.0 method is not implemented
at weblogic.jdbc.oci.Connection.prepareStatement(Connection.java:765)
atweblogic.jdbc.common.internal.ConnectionEnv.getStatementHolderForCachedPrepa
red(ConnectionEnv.java:377)
at weblogic.jdbc.pool.Connection.prepareStatement(Connection.java:402)
atweblogic.jdbc.rmi.internal.ConnectionImpl.prepareStatement(ConnectionImpl.ja
va:313)
atweblogic.jdbc.rmi.SerialConnection.prepareStatement(SerialConnection.java:40
3)
>
java.sql.SQLException: This JDBC 2.0 method is not implemented
at weblogic.jdbc.oci.ResultSet.absolute(ResultSet.java:1096)
at weblogic.jdbc.pool.ResultSet.absolute(ResultSet.java:478)
atweblogic.jdbc.rmi.internal.ResultSetImpl.absolute(ResultSetImpl.java:695)
at weblogic.jdbc.rmi.SerialResultSet.absolute(SerialResultSet.java:830)
Any recommendations would be appreciated.

Similar Messages

  • 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

  • JDBC 2/Oracle driver problems

    Hello,
    I am trying to use use JDBC 2 features on an oracle 8 database. I was told that this was possible as long as i used the correct driver (Oracle 8.1.6). I have downloaded this driver, added it to the projects library's, changed JDevelopers IDE Classpath to point to "classes12.zip".
    However when i try to set up a simple connection to the database i get errors, but when i switch back to the old oracle driver (8.1.5) it works ok). Below is the code that i use to connect to the DB:
    try
    DriverManager.setLogWriter(errorOut);
    DriverManager.registerDriver (new
    oracle.jdbc.driver.OracleDriver());
    con = DriverManager.getConnection
    (url,"cdr","test");
    System.out.println("Coneecting to db using
    " + url);
    catch (Exception ex)
    The above code fails and produces the following errors/exceptions:
    DriverManager.initialize: jdbc.drivers = null
    JDBC DriverManager initialized
    registerDriver: driver[className=oracle.jdbc.driver.OracleDriver,oracle.jdbc.driver.OracleDriver@3779]
    registerDriver: driver[className=oracle.jdbc.driver.OracleDriver,oracle.jdbc.driver.OracleDriver@37b8]
    DriverManager.getConnection("jdbc racle:thin:@212.240.193.99:1521:inspect")
    trying driver[className=oracle.jdbc.driver.OracleDriver,oracle.jdbc.driver.OracleDriver@3779]
    Exception occurred during event dispatching:
    java.lang.NoClassDefFoundError: oracle/jdbc2/Blob
    void oracle.jdbc.dbaccess.DBAccess.setNlsParamsClient(oracle.jdbc.driver.OracleConnection)
    void oracle.jdbc.ttc7.TTC7Protocol.initNls(oracle.jdbc.driver.OracleConnection)
    void oracle.jdbc.driver.OracleConnection.<init>(oracle.jdbc.dbaccess.DBAccess, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.util.Properties)
    java.sql.Connection oracle.jdbc.driver.OracleDriver.getConnectionInstance(oracle.jdbc.dbaccess.DBAccess, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.util.Properties)
    java.sql.Connection oracle.jdbc.driver.OracleDriver.connect(java.lang.String, java.util.Properties)
    java.sql.Connection java.sql.DriverManager.getConnection(java.lang.String, java.util.Properties, java.lang.ClassLoader)
    java.sql.Connection java.sql.DriverManager.getConnection(java.lang.String, java.lang.String, java.lang.String)
    null

    Hi,
    Sorry, I didn't look closely enough at your error stack. The problem appears to be with the Blob class. This class has moved from classes12.zip.
    In the Oracle JDBC Developer's Guide and Reference docs (8.1.6), there is a section on upgrading from JDK 1.1.x to JDK 1.2:
    Migration from JDK 1.1.x to JDK 1.2.x
    The only migration requirements in going from JDK 1.1.x to JDK 1.2.x are as follows:
    Remove your imports of the oracle.jdbc2 package, as discussed above under "Datatype Support".
    Replace any direct references to oracle.jdbc2.* interfaces with references to the standard java.sql.* interfaces.
    Type map objects (for mapping SQL structured objects to Java types), which must extend the java.util.Dictionary class under JDK 1.1.x, must
    implement the java.util.Map interface under JDK 1.2.x. Note, however, that the class java.util.Hashtable satisfies either requirement. If you used
    Hashtable objects for your type maps under JDK 1.1.x, then no change is necessary. For more information, see "Creating a Type Map Object and Defining
    Mappings for a SQLData Implementation".
    If these points do not apply to your code, then you do not need to make any code changes or recompile to run under JDK 1.2.x.

  • JDBC calling an Oracle PL/SQL Package?

    Does anyone know how to have JDBC call an Oracle PL/SQL Package?
    Thanks, Jon

    Review the CallableStatement object in the JDBC Developers Guide

  • Calling From Oracle Forms 11g patch set 2(11.1.1.3.0) to  Oracle Reports 1

    Hi
    While calling From Oracle Forms 11g patch set 2(11.1.1.3.0) to Oracle Reports 11g patch set 2(11.1.1.3.0) I found unable to run report error
    But its finely working in 10g. The Place of error is in find_report_object
    Is any solution to resolve this problem like any registry setting or patches to solve this problem
    Please guide me
    Regards
    Murali N S

    I was able to download it from this link:
    [http://download-llnw.oracle.com/otn/java/jdeveloper/11.1.1.3.0/jdevstudio11113install.exe]
    on the general 11g Fusion download page at:
    [http://www.oracle.com/technology/software/products/middleware/index.html]
    Although the site does appear to be having problems. I got intermittent errors of the page/server not being available.

  • Calling a Oracle Stored Procedure which will take a while to complete

    Hey.
    I'm calling a Oracle stored procedure which goes of and do a whole lot of things and therefore takes a fair while to complete.
    Currently I am doing this:
    String sql = "begin concorde.start_transfer(); end;";
    HibernateUtil.getSessionFactory().openStatelessSession().connection().prepareCall(sql).execute();
    ....Where HibernateUtil is just a mean to get to the SessionFactory. The connection I get is the same one as a JDBC, I think.
    I would want to regain control of the application as soon as the procedure is called and continue with the rest of the logic.
    How do I do that? Do I have to initiate it from a different thread?
    Thanks

    If it was me I wouldn't have a stored proc that took a while to complete. Instead I would submit a job to job queue. In terms of implementation I would call a proc that writes a record to a table. Then a process in the database polls that table and runs jobs it finds there. Then reports results somewhere.
    Sometime later you collect the results.
    But without that then the solution in java is obvious - create a thread.

  • XI calling an Oracle Stored Procedure which returns an Object to XI

    I am currently trying to call an Oracle Packaged/Procedure from XI which accepts a couple of parameters as I/O and returns an Object as one of the parameters.
    I have created the Object within the Oracle Database CREATE OR REPLACE TYPE xy_jdbc AS OBJECT
    column_name type ...etc
    CREATE OR REPLACE TYPE xy_tab_jdbc AS TABLE OF xy_jdbc;
    One of the parameters for the stored procedure is set up as this type xy_tab_jdbc this will be populated based upon one of the parameters passed into the  Package/Procedure.
    Is this possible? If it is, how do I map the returned object within XI?

    Dear Hilary,
    the JDBC adapter does not support vendor-specific or non-scalar data types.
    Workaround: Change the stored proc's signature not to use an object, but the object's fields instead.
    Regards,
    Thilo

  • Pass a null value to a JDBC stored procedure call?

    pass a null value to a JDBC stored procedure call? Is this even possible? My DBA gave me a procedure to call that sometimes requires a null value. I don't think this is even possible.

    do you mind tell me how to resolve your problem?i using the setnull method,but it doesn't work.

  • Oracle strange problem

    Hi to everybody,
    i have oracle 9i and select and other queries work fine accept stored procedure. The strange thing is that these stored procedures are working fine on sql tools..
    this is my connection to oracle db:
    Context ictx = new InitialContext(env);
    DataSource ds=(javax.sql.DataSource)(ictx.lookup("java:/OracleDS"));
    Connection cnn = ds.getConnection();
    the driver is OracleDriver and the connection is thin connection type
    and this is where i call sp:
    String sqlClause = " {call R_REQUESTACTION_INSERT(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}";
    cs = cnX.prepareCall(sqlClause);
    cs.setString (1, user.getUserFirm() ); //1
    cs.setString (2, user.getUserOrganization() ); //2
    cs.setString (3, user.getAdUserId() ); //3
    cs.setString (4, user.getAdUserId() ); //4
    cs.setString (5, musteriTemsilcisi ); //5
    cs.setString (6, aksiyonTipi ); //6
    cs.setTimestamp (7, dateNextActionTime ); //7
    cs.setString (8, musteriNumarasi ); //8
    cs.setString (9, musteriYetkilisi ); //9
    cs.setString (10, gonderilecekMetin ); //10
    cs.setString (11, aksiyonSonucu ); //11
    cs.setString (12, actionId ); //12
    cs.setString (13, requestId ); //13
    cs.setString (14, daireNo ); //14
    cs.executeUpdate();
    cnX.commit();
    And it gives the error below:
    java.sql.SQLException: ORA-00900: invalid SQL statement
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:579)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1894)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1094)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2132)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2015)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2877)The error message: ORA-00900: invalid SQL statement
    Anybody has any idea?

    Hello,
    I don't know much about this issue, but wanted to point out that while someone else here maybe able to help, you might get a better response posting this to the JDBC forum at:
    http://forums.oracle.com/forums/forum.jspa?forumID=99
    Best Regards,
    Chris

  • How to call an Oracle Procedure and get a return value in Php

    Hi Everyone,
    Has anyone tried calling an Oracle procedure from Php using the ora functions and getting the return value ? I need to use the ora funtions (no oci)because of compatibility and oracle 7.x as the database.
    The reason why I post this here is because the ora_exec funtion is returning FALSE but the error code displayes is good. Is this a bug in the ora_exec funtion ?
    My code after the connection call is as follows:
    $cur = ora_open($this->conn);
    ora_commitoff($this->conn);
    $requestid = '144937';
    echo $requestid;
    $rc = ora_parse($cur, "begin p_ins_gsdata2
    (:requestid, :returnval); end;");
    if ($rc == true) {
    echo " Parse was successful ";
    $rc2 = ora_bind ($cur, "requestid", ":requestid", 32, 1);
    if ($rc2 == true) echo " Requestid Bind Successful ";
    $rc3 = ora_bind ($cur, "returnval", ":returnval", 32, 2);
    if ($rc3 == true) echo " Returnval Bind Successful ";
    $returnval = "0";
    $rc4 = ora_exec($cur);
    echo " Result = ".$returnval." ";
    if ($rc4 == false) {
    echo " Exec Returned FALSE ";
    echo " Error = ".ora_error($cur);
    echo " ";
    echo "ErrorCode = ".ora_errorcode($cur);
    echo "Error Executing";
    ora_close ($cur);
    The Oracle procedure has a select count from a table and it returns the number of records in that table. It's defined as:
    CREATE OR REPLACE procedure p_ins_gsdata2 (
    p_requestid IN varchar2 default null,
    p_retcode OUT varchar2)
    as
    BEGIN
    SELECT COUNT (*) INTO p_retcode
    FROM S_GSMRY_DATA_SURVEY
    WHERE request_id = p_requestid ;
    COMMIT;
    RETURN;
    END;
    Nothing much there. I want to do an insert into a table,
    from the procedure later, but I figured that I start with a select count since it's simpler.
    When I ran the Php code, I get the following:
    144937
    Parse was successful
    Requestid Bind Successful
    Returnval Bind Successful
    Result = 0
    Exec Returned FALSE
    Error = ORA-00000: normal, successful completion -- while
    processing OCI function OBNDRA
    ErrorCode = 0
    Error Executing
    I listed the messages on separate lines for clarity. I don't understand why it parses and binds o.k. but the exec returns false.
    Thanks again in advance for your help. Have a great day.
    Regards,
    Rudi

    retcode=`echo $?`is a bit convoluted. Just use:
    retcode=$?I see no EOF line terminating your input. Your flavour of Unix might not like that - it might ignore the command, though I'd be surprised (AIX doesn't).
    replace the EXEC line with :
    select 'hello' from dual;
    and see if you get some output - then you know if sqlplus commands are being called from your script. You didn't mentioned whether you see the banner for sqlplus. Copy/paste the output that you get, it will give us much more of an idea.

  • OIM 9.1.0.2 - Weblogic JDBC Multi Data Sources for Oracle RAC

    Does OIM OIM 9.1.0.2 BP07 support Weblogic JDBC Multi Data Sources (Services>JDBC>Multi Data Sources) for Oracle RAC instead of inserting the "Oracle RAC JDBC URL" on JDBC Data Sources for xlDS and xlXADS (Services>JDBC>Data Sources> xlDS|xlXADS > Connection Poll> URL) ?
    If yes, is there are any other modifications that need to be made on OIM, or just changing the data sources?

    Yes, it's supported. You install against one instance directly of the Rac Server. Then you update the config.xml file and the jdbc resource in your weblogic server with the full rac address. It is documented for installation against RAC. http://docs.oracle.com/cd/E14049_01/doc.9101/e14047/database.htm#insertedID2
    -Kevin

  • C# DLL Calls in Oracle Forms 6i

    Dear all,
    I want to call a C# ( C Sharp) functions in Oracle Forms 6i , How it is possible , If any body knows give me a suggestion...
    C# Codes
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace MathFunctions
    public class AddClass
    public static int Add(int a, int b)
    return (a + b);
    same codes I want to call using Oracle Forms 6i . ... ( AddClass.Add(10,20) ) value should return 30.
    C# Developer created the DLL file and given to me , I am not able to attach the DLL , anybody interest I can send the DLL through E-mail ,
    Regards,
    Veera.
    [email protected]

    The Forms Builder Help is the best source of information. It has plenty of examples too, like this one I copied from the Help:
    /* Find foreign library handle for
       a given library name */
    BEGIN
       libhandle := ora_ffi.find_library
                ('mylib.dll');
    END;

  • Use jdbc to connect servlet to oracle 8.1.6 database on win2k

    The code is below:
    package moreservlets;
    import java.sql.*;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    /** Simple servlet used to test JDBC connection. */
    public class TitleQueries extends HttpServlet {
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Connecting to Database";
    DriverManager.registerDriver (new
    oracle.jdbc.driver.OracleDriver());
    Connection conn = DriverManager.getConnection
    ("jdbc:oracle:thin:@pc840:1521:orcl", "scott", "tiger");
    Statement stmt = conn.createStatement();
    ResultSet rset = stmt.executeQuery
    ("select ename from emp");
    while (rset.next()) {
    String name = rset.getString("ename");
    out.println(ServletUtilities.headWithTitle(title) +
    "<body bgcolor=\"#FDF5E6\">\n" +
    "<h1 align=\"center\">" + name + "</h1>\n" +
    "</body></html>");
    CLASSPATH=.;C:\J2ee;C:\j2sdkee1.3.1\lib\cloudscape;C:\Program Files\Apache Tomcat 4.0\common\lib\servlet.jar;C:\Oracle\Ora81\orb\classes\yoj.jar;C:\Oracle\Ora81\orb\classes\share.zip
    My code cannot find the JDBC driver. Any suggestions?
    Thanks.
    I get the following errors:
    C:\J2ee\moreservlets>javac -d "C:\Program Files\Apache Tomcat 4.0\webapps\ROOT\
    EB-INF\classes" TitleQueries.java
    TitleQueries.java:19: package oracle.jdbc.driver does not exist
    oracle.jdbc.driver.OracleDriver());
    ^
    TitleQueries.java:31: cannot resolve symbol
    symbol : variable name
    location: class moreservlets.TitleQueries
    "<h1 align=\"center\">" + name + "</h1>\n" +
    ^
    2 errors

    I changed my classpath variable and my servlet
    compiles okay with the:
    "import oracle.jdbc.driver.*" statement.
    However, I still get the following error.
    Why can't it find the jdbc driver, since it finds the
    import statement?
    Apache Tomcat/4.0.3
    Error loading driver: java.lang.ClassNotFoundException: oracle.jdbc.driver.Oracl
    eDriver
    WebappClassLoader: Resource '/WEB-INF/classes/moreservlets/ServletUtilities.cl
    ass' was modified; Date is now: Tue Jul 02 09:57:26 CDT 2002 Was: Tue Jul 02 09:
    37:20 CDT 2002
    Error loading driver: java.lang.ClassNotFoundException: oracle.jdbc.driver.Oracl
    eDriver
    CLASSPATH=.;C:\J2ee;C:\j2sdkee1.3.1\lib\cloudscape\RmiJdbc;C:\Program Files\Apache Tomcat 4.0\common\lib\servlet.jar;C:\Oracle\Ora81\jdbc\lib\classes12.zip;C:\Oracle\Ora81\orb\classes\yoj.jar;C:\Program Files\Oracle\JDeveloper 3.2.3\jdbc\lib\oracle8.1.7\classes12.zip;C:\Oracle\Ora81\orb\classes\share.zip
    //code begins here
    package moreservlets;
    import java.sql.*;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import oracle.jdbc.driver.*;
    public class TitleQueries extends HttpServlet {
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn = DriverManager.getConnection
    ("jdbc:oracle:thin:@pc840:1521:orcl", "scott", "tiger");
    Statement stmt = conn.createStatement();
    ResultSet rset = stmt.executeQuery
    ("select * from emp");
    out.println(ServletUtilities.headWithTitle(title) +
    "<body bgcolor=\"#FDF5E6\">");
    while (rset.next()) {
    out.println("<h1 align=\"center\">"
    + rset.getString("ename") + "</h1>\n");
    out.println("</body></html>");
    catch(ClassNotFoundException cnfe) {
    System.err.println("Error loading driver: " + cnfe);
    catch(SQLException sqle) {
    System.err.println("Error connecting: " + sqle);
    }

  • We bought an iphone 4s for our daughter. We transfered it to straight talk. She can make calls and text no problem. She can use the WiFi but is unable to use the internet or mms. How do we update the APN?

    We bought an iphone 4s for our daughter. We transfered it to straight talk. She can make calls and text no problem. She can use the WiFi but is unable to use the internet or mms. How do we update the APN?

    To clarify for anyone who is still having any problems doing this.
    1. Unlock your phone with the carrier ( I know the process will work if it is jail broken but I am assuming you dont want to void the warranty on your phone) NOTE: even if you purchased the phone outright at Wal-Mart it is still locked to ATT so you will have to unlock the phone.  If it's already unlocked skip to step 2.  This works and will work even if you update the phone. 
    1a Here is the link to unlock a ATT iphone. Simply follow the instructions https://www.att.com/deviceunlock/client/en_US/
    2. Get a T- mobile SIM. Even if you don't want the service, if you feign interest, they will send you one for free or 99cents. If you need it now you can get one at a T-mobile store too.
    3. Once you have both your Straight talk SIM and your T-mobile SIM follow these instructions:http://www.youtube.com/watch?v=mFFf5uqk18M
    4. If you have any remaining questions look at all the responses posted previously on this thread or check out the Howard Forums Wiki: http://wiki.howardforums.com/index.php/Straight_Talk_iPhone
    Everything should work flawlessly at this point.  If not let me know and I'm happy to help when I can.  I hope this makes doing this very easy for everyone in the future. God Bless -J

  • Call to Oracle stored procedure that returns ref cursor doesn't work

    I'm trying to use an OData service operation with Entity Framework to call an Oracle stored procedure that takes an number as an input parameter and returns a ref cursor. The client is javascript so I'm using the rest console to test my endpoints. I have been able to successful call a regular Oracle stored procedure that takes a number parameter but doesn't return anything so I think I have the different component interactions correct. When I try calling the proc that has an ref cursor for the output I get the following an error "Invalid number or type of parameters". Here are my specifics:
    App.config
    <oracle.dataaccess.client>
    <settings>
    <add name="PGDATA_WC.ODATAPOC.GETWORKORDERSBYWINDFARMID.RefCursor.P_RESULTS" value="implicitRefCursor bindinfo='mode=Output'" />
    <add name="PGDATA_WC.ODATAPOC.GETWORKORDERSBYWINDFARMID.RefCursorMetaData.P_RESULTS.Column.0" value="implicitRefCursor metadata='ColumnName=WINDFARM_ID;BaseColumnName=WINDFARM_ID;BaseSchemaName=PGDATA_WC;BaseTableName=WORKORDERS;NATIVEDATATYPE=Number;ProviderType=Int32'" />
    <add name="PGDATA_WC.ODATAPOC.GETWORKORDERSBYWINDFARMID.RefCursorMetaData.P_RESULTS.Column.1" value="implicitRefCursor metadata='ColumnName=STARTTIME;BaseColumnName=STARTTIME;BaseSchemaName=PGDATA_WC;BaseTableName=WORKORDERS;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" />
    <add name="PGDATA_WC.ODATAPOC.GETWORKORDERSBYWINDFARMID.RefCursorMetaData.P_RESULTS.Column.2" value="implicitRefCursor metadata='ColumnName=ENDTIME;BaseColumnName=ENDTIME;BaseSchemaName=PGDATA_WC;BaseTableName=WORKORDERS;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" />
    <add name="PGDATA_WC.ODATAPOC.GETWORKORDERSBYWINDFARMID.RefCursorMetaData.P_RESULTS.Column.3" value="implicitRefCursor metadata='ColumnName=TURBINE_NUMBER;BaseColumnName=TURBINE_NUMBER;BaseSchemaName=PGDATA_WC;BaseTableName=WORKORDERS;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" />
    <add name="PGDATA_WC.ODATAPOC.GETWORKORDERSBYWINDFARMID.RefCursorMetaData.P_RESULTS.Column.4" value="implicitRefCursor metadata='ColumnName=NOTES;BaseColumnName=NOTES;BaseSchemaName=PGDATA_WC;BaseTableName=WORKORDERS;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" />
    <add name="PGDATA_WC.ODATAPOC.GETWORKORDERSBYWINDFARMID.RefCursorMetaData.P_RESULTS.Column.5" value="implicitRefCursor metadata='ColumnName=TECHNICIAN_NAME;BaseColumnName=TECHNICIAN_NAME;BaseSchemaName=PGDATA_WC;BaseTableName=WORKORDERS;NATIVEDATATYPE=Varchar2;ProviderType=Varchar2'" />
    <add name="PGDATA_WC.ODATAPOC.GETWORKORDERSBYID.RefCursor.P_RESULTS" value="implicitRefCursor bindinfo='mode=Output'" />
    </settings>
    OData Service Operation:
    public class OracleODataService : DataService<OracleEntities>
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService(DataServiceConfiguration config)
    // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
    // Examples:
    config.SetEntitySetAccessRule("*", EntitySetRights.All);
    config.SetServiceOperationAccessRule("GetWorkOrdersByWindfarmId", ServiceOperationRights.All);
    config.SetServiceOperationAccessRule("CreateWorkOrder", ServiceOperationRights.All);
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    [WebGet]
    public IQueryable<GetWorkOrdersByWindfarmId_Result> GetWorkOrdersByWindfarmId(int WindfarmId)
    return this.CurrentDataSource.GetWorkOrdersByWindfarmId(WindfarmId).AsQueryable();
    [WebGet]
    public void CreateWorkOrder(int WindfarmId)
    this.CurrentDataSource.CreateWorkOrder(WindfarmId);
    Here is the stored procedure:
    procedure GetWorkOrdersByWindFarmId(WINDFARMID IN NUMBER,
    P_RESULTS OUT REF_CUR) is
    begin
    OPEN P_RESULTS FOR
    select WINDFARM_ID,
    STARTTIME,
    ENDTIME,
    TURBINE_NUMBER,
    NOTES,
    TECHNICIAN_NAME
    from WORKORDERS
    where WINDFARM_ID = WINDFARMID;
    end GetWorkOrdersByWindFarmId;
    I defined a function import for the stored procedure using the directions I found online by creating a new complex type. I don't know if I should be defining the input parameter, WindfarmId, in my app.config? If I should what would that format look like? I also don't know if I'm invoking the stored procedure correctly in my service operation? I'm testing everything through the rest console because the client consuming this information is written in javascript and expecting a json format. Any help is appreciated!
    Edited by: 1001323 on Apr 20, 2013 8:04 AM
    Edited by: jennyh on Apr 22, 2013 9:00 AM

    Making the change you suggested still resulted in the same Oracle.DataAccess.Client.OracleException {"ORA-06550: line 1, column 8:\nPLS-00306: wrong number or types of arguments in call to 'GETWORKORDERSBYWINDFARMID'\nORA-06550: line 1, column 8:\nPL/SQL: Statement ignored"}     System.Exception {Oracle.DataAccess.Client.OracleException}
    I keep thinking it has to do with my oracle.dataaccess.client settings in App.Config because I don't actually put the WindfarmId and an input parameter. I tried a few different ways to do this but can't find the correct format.

Maybe you are looking for