Refcursor IN

Hello All,
I'm using oracle 11gR2
One of our user wants all their LOVs maintained thru a UI. They have close to 50 LOV tables with no. of fields ranging from 5 to 10 with mostly different names.
I'm trying to write a generalized package to get the values, set the values and delete the values. We have permissions/privileges being checked before any of the DML being performed.
for the get procedure, I'm returning a refcursor when they pass in the table name (may not be ideal but....had to) and now starting to work on the set procedure (insert new values). Some of the issues that I'm trying to address is that the number of fields are not constant, the field names are different etc..
Would passing in a refursor work for this scenario? or is there better ways of doing it? Please shed some light.
Thanks in advance
NU

>
One of our user wants all their LOVs maintained thru a UI. They have close to 50 LOV tables with no. of fields ranging from 5 to 10 with mostly different names.
I'm trying to write a generalized package to get the values, set the values and delete the values. We have permissions/privileges being checked before any of the DML being performed.
Some of the issues that I'm trying to address is that the number of fields are not constant, the field names are different
>
First you need to quit focusing on the solution you seem to want to use (ref cursor) and get back to focusing on defining the problem and the requirements.
Once the complete requirements are available you can start looking for solutions that can be used.
>
I'm trying to write a generalized package
>
Well you can't do that if the requirements (column names and number of columns) for the 50 LOVs are different.
You either have to make the number and names of columns the same (using a view perhaps) or you will need more than one 'generic' set of code (that is, one for each set of LOVs that is consistent.
What UI are you talking about? A Java middle-tier? You may have a choice of where to put the business rules: in the middle tier so the back-end code is more generic or in the back-end.
I suggest you first need to review the 50 LOVs and determine how many similar sets of them that you have.
Some common attirbutes might be: 1) actual attribute name, 2) display name, 3) actual attribute value, 4) display value/format
The 'display' attributes are what the business user wants displayed and the name they want to use to refer to the attribute ('State Code'). The 'actual' attributes are what is really used in the back-end ('STATE_CD'). For generics you want to use a mapping table so you can map the business name to the actual name and break the dependency.
The key thing is what I said above. Focus on nailing down the requirements. The correct solution will be more readily apparent when you know for sure what all of the issues are.

Similar Messages

  • Problem with refcursor in 11g

    Hello,
    I have a problem with refcursor in a project migrated from 10 to 11g.
    I found this thread from a few years ago that talks about the same problem.
    It has no final answer - is it ok to comment the st.close(); in callStoredFunction in the AMImpl.
    Re: TP4 - View Object with REF CURSOR - SQLException
    Please tell me if the suggested solution on that thread is fine, or ot will cause many unclosed statetements?
    Thank you, Nina

    Hello All,
    I got the solution to the problem.
    I was trying to surround the region component using the Structure pane. But instead drag and drop the strechable components on to the region.
    Ex: Region got expanded 100% if I surround it with PanelStrechLayout with width and height set to 100%. But I didnit find this Panel StrechLayout when I try to surround it using Structure Pane.
    Refer to this: http://www.oracle.com/technology/products/adf/patterns/layoutBestPractices.html
    Thanks,
    Melissa.

  • Show refcursor returned by a PL/SQL function ?

    Is it possible to show the results returned by a
    PL/SQL function that returns a refcursor ?
    In sqlplus it goes like this:
    SQL> variable a refcursor;
    SQL> execute :a := p_front.get_invoice_list;
    PL/SQL procedure successfully completed.
    SQL> print a;
    INVOICE_ID CLIENT_ID INVOICE_D
    101 100 01-APR-06
    100 100 06-APR-06
    If not, this would be on the top of my wishlist...
    By the way: you did a good job on this tool!
    Regards,
    Willem

    Is it possible to show the results returned by a
    PL/SQL function that returns a refcursor ?
    In sqlplus it goes like this:
    SQL> variable a refcursor;
    SQL> execute :a := p_front.get_invoice_list;
    PL/SQL procedure successfully completed.
    SQL> print a;
    INVOICE_ID CLIENT_ID INVOICE_D
    101 100 01-APR-06
    100 100 06-APR-06
    If not, this would be on the top of my wishlist...
    By the way: you did a good job on this tool!
    Regards,
    Willem

  • Having issues with bind variable refcursor

    Hi,
    I have a procedure which returns just the list of employees from the emp table.
    while executing this package, it gives me an error
    Ex:
    sql> variable cur refcursor;
    sql> exec emp.getemplist(:cur);
    error:
    not all variables bound
    Please let me know what is wrong here.
    Thanks
    Manju

    manjukn wrote:
    package is a simple one..
    Exact Oracle version? Works fine on 10.2.0.4.0:
    SQL> create or replace package body emp_pkg is
      2  PROCEDURE getemplist (result_cursor OUT sys_refcursor)
      3  IS
      4  begin
      5  open result_cursor for select * from emp where deptno=10;
      6  end getemplist;
      7  end emp_pkg;
      8  /
    Package body created.
    SQL> variable cur refcursor;
    SQL> exec emp_pkg.getemplist(:cur);
    PL/SQL procedure successfully completed.
    SQL> print cur
         EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
          7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
          7839 KING       PRESIDENT            17-NOV-81       5000                    10
          7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
    SQL> SY.

  • How to call a procedure with refcursor  from another  plsql unit

    example I created a pkg with the a procedure that returns a REFCURSOR.
    Now I need to call this procedure from another pkg and use the refcursor values in other pkg.
    Help please.......
    PROCEDURE CustomerSite_Get (p_Registry IN VARCHAR2,
    p_CustomerNumber IN VARCHAR2, p_Cursor IN OUT t_cursor);
    PROCEDURE CustomerSite_Get (p_Registry IN VARCHAR2,
    p_CustomerNumber IN VARCHAR2, p_Cursor IN OUT t_cursor)
    IS
    -- 0903: Include BillToName
    BEGIN
    OPEN p_Cursor FOR
         SELECT S.LOCATION CustomerSite, S.SITE_USE_ID CustomerSiteID, C.CUSTOMER_NAME BillToName
         FROM RA_CUSTOMERS C,
    RA_ADDRESSES A,
    RA_SITE_USES S,
    UWA_REGISTRY R,
    UWA_REGISTRY_BILL_TO B
         WHERE C.CUSTOMER_ID = A.CUSTOMER_ID
         AND A.ADDRESS_ID = S.ADDRESS_ID
         AND S.SITE_USE_ID = B.SITE_USE_ID
         AND R.REGISTRY_ID = B.REGISTRY_ID
         AND B.TRIP_BILLING != 'N'
         AND R.DELETE_FLAG != 'Y'
              AND R.Registry = p_Registry
              AND R.CUSTOMER_NUM = p_CustomerNumber
         ORDER BY S.LOCATION;
    END CustomerSite_Get;
    thanks,
    Anitha.
    Edited by: user521218 on May 6, 2009 1:24 PM

    Hi Anitha,
    try this,
    -- PKG_A
    Procedure CustomerSite_Get( p_Registry       IN Varchar2
                              , p_CustomerNumber IN Varchar2
                              , p_Cursor         IN OUT t_cursor) Is
    Begin
       PKG_B.CustomerSite_Get( p_Registry     
                             , p_CustomerNumber
                             , p_Cursor );
    End;
    -- PKG_B
    Procedure CustomerSite_Get(p_Registry       IN Varchar2
                              ,p_CustomerNumber IN Varchar2
                              ,p_Cursor         IN OUT t_cursor) Is
    Begin
       Open p_Cursor For
          SELECT S.LOCATION      CustomerSite
                ,S.SITE_USE_ID   CustomerSiteID
                ,C.CUSTOMER_NAME BillToName
            FROM RA_CUSTOMERS         C
                ,RA_ADDRESSES         A
                ,RA_SITE_USES         S
                ,UWA_REGISTRY         R
                ,UWA_REGISTRY_BILL_TO B
           WHERE C.CUSTOMER_ID = A.CUSTOMER_ID
             AND A.ADDRESS_ID = S.ADDRESS_ID
             AND S.SITE_USE_ID = B.SITE_USE_ID
             AND R.REGISTRY_ID = B.REGISTRY_ID
             AND B.TRIP_BILLING != 'N'
             AND R.DELETE_FLAG != 'Y'
             AND R.Registry = p_Registry
             AND R.CUSTOMER_NUM = p_CustomerNumber
           Order BY S.LOCATION;
    End CustomerSite_Get;regards,
    Christian Balz

  • How can I execute this procedure in sql developer, cursortype is refcursor

    PROCEDURE GET_CNTRY(CNTRY_NME_IN IN VARCHAR2 DEFAULT NULL,
    QRY_RSLT_OUT OUT CURSORTYPE) AS
    BEGIN
    OPEN QRY_RSLT_OUT FOR
    select
    CNTRY_NME,
    FRGN_CNTRY_CDE,
    INV_VEH_CNTRY_CDE,
    FRGN_CNCY_CDE,
    WTHH_PCT_COLA_CDE
    FROM
    CNTRY
    WHERE
    CNTRY_NME = NVL(CNTRY_NME_IN,CNTRY_NME);
    END GET_CNTRY;

    In SQL Developer run the following code as script (You need to hit F5 to run it as script).
    var rc refcursor
    exec get_cntry (<give your cntry_nme_in>, :rc)
    print :rc

  • Looping through a refcursor to get list of dates as a string

    hi,
    i have a simple procedure which gives me list of from dates and to dates
    i need to get the dates a comma separated dates
    i am not sure if this can be done directly by doing a for loop on the refcursor or i have to fetch it into a record/array and then concatenate with comma or is there anything else that can be done.
    i tried out some stuff like below
    ps help me out
    the procedure that retruns the list of dates is
    CREATE OR REPLACE procedure SALUSER.prm_sp_rpt_payslip_lop_dates(p_empid in int,p_tran_year in int,p_tran_month in integer,o_dates out sys_refcursor)
    as
    begin
    open o_dates for select  to_char(PHL_LOP_FROM,'DD-Mon-YYYY'),to_char(PHL_LOP_TO,'DD-Mon-yyyy')
                     from prm_h_lop
                     where phl_emp_id=p_empid
                       and phl_tran_year=p_tran_year
                       and phl_Tran_month=p_tran_month;
    end;
    /i need my o/p as
    dates :<date1>,<date2>...etcregards,

    Maybe sth. like
    SQL>  var cur refcursor
    SQL>  declare
    cr sys_refcursor;
    procedure prm_sp_rpt_payslip_lop_dates (cr in out sys_refcursor)
    as
    begin
       open cr for select hiredate from emp;
    end prm_sp_rpt_payslip_lop_dates;
    begin
    prm_sp_rpt_payslip_lop_dates(cr);
    open :cur for select 'Dates: ' || column_value dates from xmltable('string-join(//text(), ", ")' passing xmltype(cr));
    end;
    PL/SQL procedure successfully completed.
    SQL>  print cur
    DATES                                                                          
    Dates: 17-Dec-1980, 20-Feb-1981, 22-Feb-1981, 02-Apr-1981, 28-Sep-1981, 01-May-1
    981, 09-Jun-1981, 19-Apr-1987, 17-Nov-1981, 08-Sep-1981, 23-May-1987, 03-Dec-198
    1, 03-Dec-1981, 23-Jan-1982                                                    
    1 row selected.

  • How to read the data from a refcursor

    Hi all,
    Here my program . I'm calling pr_test into another program there i need to read the values from refcursor of pr_test program . I dont want use all the values in my second program I need to pass empno and job only.
    pls help me out how to read this?
    package pg_test
    is
    type curvartype is ref cursor;
    procedure pr_test(p_empno in number, o_curvar_out curvartype);
    end;
    package pg_test is
    procedure pr_test( o_curvar_out curvartype)
    is
    begin
    open o_curvar_out for
    select * from emp;
    end loop;
    end;
    end;Thanks,
    Venkat.

    I dont want use all the values in my second program I need to pass empno and job only.Since your cursor gets all the columns (using the * is not a good way to code the cursor), that is what your other program will get when it calls pr_test procedure. You will have to FETCH all the columns in that other procedure and discard the ones you do not need.
    Alternatively, change the code of cursor to select only the columns you would actually need.

  • Issue with IN parameter of Oracle Procedure returning two RefCursors...

    Hi all,
    I'm having a nightmare with an Oracle procedure that takes one input parameter and returns two RefCursors as outputs. I recently got help in this forum getting a procedure to work that took no inputs but returned two refcursors and that's still working fine. So, for my current issue I have a procedure defined as follows:
    PROCEDURE getQueueInfo(domainKey char, importQueues OUT ODPNet.refcur, exportQueues OUT ODPNet.refcur) IS
      BEGIN
        OPEN importQueues FOR SELECT
        source_key, source_applid,
        import_status(source_key) as status,
        time_added, time_processed
        FROM wm_import_source_header
        WHERE source_id = domainKey
        ORDER BY source_key DESC;
        OPEN exportQueues FOR SELECT
        h.source_key, d.source_applid,
        export_status(h.source_key) as status,
        d.source_wire_code, d.destination_wire_code, h.time_added,
        h.time_transmitted
        FROM wm_export_source_header h, wm_export_source_data d
        WHERE h.source_key = d.source_key
          and d.source_id = domainKey
        ORDER BY h.source_key DESC;
      END getQueueInfo;This is defined within a package called ODPNet as with my previous procedure and all works fine (I can execute within Oracle SQL Developer and it returns the expected results). Within my .NET application my code is as follows:
                try
                    using (OracleConnection conn = new OracleConnection(connString))
                    using (OracleCommand comm = new OracleCommand())
                        comm.CommandText = "ODPNet.getQueueInfo";
                        comm.CommandType = CommandType.StoredProcedure;
                        comm.Connection = conn;
                        OracleParameter domainKey = new OracleParameter();
                        OracleParameter importQueues = new OracleParameter();
                        OracleParameter exportQueues = new OracleParameter();
                        domainKey.OracleDbType = OracleDbType.Char;
                        importQueues.OracleDbType = OracleDbType.RefCursor;
                        exportQueues.OracleDbType = OracleDbType.RefCursor;
                        domainKey.Value = "UKBD72";
                        domainKey.Direction = ParameterDirection.Input;
                        importQueues.Direction = ParameterDirection.Output;
                        exportQueues.Direction = ParameterDirection.Output;
                        comm.Parameters.Add(domainKey);
                        comm.Parameters.Add(importQueues);
                        comm.Parameters.Add(exportQueues);
                        conn.Open();
                        comm.ExecuteNonQuery();
                        OracleDataReader dr1 = ((OracleRefCursor)importQueues.Value).GetDataReader();
                        OracleDataReader dr2 = ((OracleRefCursor)exportQueues.Value).GetDataReader();
                        if (dr1.HasRows)
                            while (dr1.Read())
                                result6 += dr1["source_applid"].ToString() + "<br>";
                        else
                            result6 += "No Rows";
                        if (dr2.HasRows)
                            while (dr2.Read())
                                result7 += dr2["source_applid"].ToString() + "<br>";
                        else
                            result7 += "No Rows";
                catch (Exception ex)
                    result6 = ex.ToString();
                }The value I want to submit as the IN parameter of the procedure is "UKBD72". but I'm really not sure how to apply this and then return my two refcursors into separate datareaders (except for the input parameter stuff the code above is exactly what I did with the other procedure that returned two ref cursors and still works fine). When I run this code I get no errors, I just get told that each DataReader has no rows returned, which shouldn't be right.
    Any help with this would be hugely appreciated.
    Cheers,
    Seb

    Sorry folks, after staring at this over and over, eventually going to sleep and coming back to it with some fresh eyes I realised I was just being a complete idiot - I was feeding the procedure different data in the .NET app than I was when testing in Oracle SQL Developer. Low and behold once I gave it the right data it worked!
    Silly me...

  • Problem with IN OUT Number, OUT RefCursor for EF Model StoredProcedure call

    When I call a stored procedure using the EF Model and implicit binding via App.config which has three parameters i.e. 'IN Number', 'IN OUT Number' and 'OUT sys_refcursor', the 'IN OUT Number' is not set correctly on return from the procedure.
    The 'IN OUT Number' is for an error code and is set to 12345 on input and is then set to 54321 by stored proceedure for return.
    The correct value is returned when the call is via OracleCommand using implicit binding via App.config but remains unchanged when the call is via EF Model and implicit binding via App.config.
    The ODP documentaion says you cannot have two OUT RefCursors when using EF Model but does not say you cannot have OUT RefCursor and other non-RefCursor OUT parameters.
    The idea behind this type of procedure is to have multiple input parameters to configure and filter the stored procedure and an output result set that consists of an error code and a collection of result rows in a RefCursor.
    I am using 11g R2 database and ODP 11g Release 2 (11.2.0.2.30) and ODAC Entity Framework beta.
    The query uses Scott/tiger schema with parameters department code, error code and list of employees for department.
    code:
    PROCEDURE TEST_PARAMETERS
    DEPT IN NUMBER,
    ERROR_CODE IN OUT NUMBER,
    DEPT_EMPLOYEES OUT sys_refcursor
    AS
    BEGIN
    DBMS_OUTPUT.PUT_LINE('DEPT = [' || DEPT || ']');
    DBMS_OUTPUT.PUT_LINE('ERROR_CODE = [' || ERROR_CODE || ']');
    OPEN DEPT_EMPLOYEES for SELECT empno, ename from emp where deptno = DEPT;
    -- set ERROR_CODE for return
    ERROR_CODE := 54321;
    END TEST_PARAMETERS;
    The App.config for implicit RefCursor binding is as follows ...
    <oracle.dataaccess.client>
    <settings>
    <add name="SCOTT.TEST_PARAMETERS.RefCursor.DEPT_EMPLOYEES"
    value="implicitRefCursor bindinfo='mode=Output'" />
    <add name="SCOTT.TEST_PARAMETERS.RefCursorMetaData.DEPT_EMPLOYEES.Column.0"
    value="implicitRefCursor metadata='ColumnName=EMPNO;
              BaseColumnName=EMPNO;BaseSchemaName=SCOTT;BaseTableName=EMP;
              NATIVE_DATA_TYPE=number;ProviderType=Int32;
              PROVIDER_DB_TYPE=Int32;DataType=System.Int32;
              ColumnSize=4;NumericPrecision=10;
                   NumericScale=3;AllowDBNull=false;IsKey=true'" />
    <add name="SCOTT.TEST_PARAMETERS.RefCursorMetaData.DEPT_EMPLOYEES.Column.1"
    value="implicitRefCursor metadata='ColumnName=ENAME;
              BaseColumnName=ENAME;BaseSchemaName=SCOTT;BaseTableName=EMP;
              NATIVE_DATA_TYPE=varchar2;ProviderType=Varchar2;
              PROVIDER_DB_TYPE=String;DataType=System.String;
              ColumnSize=10;AllowDBNull=true'" />
    </settings>
    </oracle.dataaccess.client>
    When the call is via OracleCommand both outputs are correct i.e. ERROR_CODE gets set to 54321 and the correct emplyees for department 10 are returned
    code:
    private void TestParametersViaOracleCommand()
    try
    string constr = "DATA SOURCE=ORCL;PASSWORD=tiger;PERSIST SECURITY INFO=True;USER ID=SCOTT";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
    OracleCommand cmd = con.CreateCommand();
    OracleDataAdapter adapter = new OracleDataAdapter(cmd);
    DataSet ds = new DataSet();
    cmd = con.CreateCommand();
    cmd.CommandText = "SCOTT.TEST_PARAMETERS";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.BindByName = true;
    OracleParameter dept = cmd.Parameters.Add("DEPT",
    OracleDbType.Int32,
    ParameterDirection.Input);
    dept.Value = 10;
    OracleParameter errorCode = cmd.Parameters.Add("ERROR_CODE",
    OracleDbType.Int32,
    ParameterDirection.InputOutput);
    errorCode.Value = 12345;
    // RefCursor output parameter implicitly bound via App.Config
    adapter = new OracleDataAdapter(cmd);
    adapter.Fill(ds);
    // should be 54321 and is ...
    Console.WriteLine("after call errorCode.Value = " + errorCode.Value);
    Console.WriteLine("list size = {0}", ds.Tables[0].Rows.Count);
    // only one table
    DataTable deptEmployeesTable = ds.Tables[0];
    for (int ii = 0; ii < deptEmployeesTable.Rows.Count; ++ii)
    DataRow row = deptEmployeesTable.Rows[ii];
    Console.WriteLine("EMPNO: " + row[0] + "; ENAME: " + row[1]);
    catch (Exception ex)
    // Output the message
    Console.WriteLine(ex.Message);
    if (ex.InnerException != null)
    // If any details are available regarding
    // errors in the app.config, print them out
    Console.WriteLine(ex.InnerException.Message);
    if (ex.InnerException.InnerException != null)
    Console.WriteLine(
    ex.InnerException.InnerException.Message);
    output:
    before call errorCode.Value = 12345
    after call errorCode.Value = 54321 (should be 54321!)
    list size = 3
    EMPNO: 7782; ENAME: CLARK
    EMPNO: 7839; ENAME: KING
    EMPNO: 7934; ENAME: MILLER
    However when call is via EF Model the correct employees are returned but the ERROR_CODE parameter is unchanged on return.
    code:
    private void TestParametersViaEFModel()
    var context = new ScottEntities();
    Decimal dept = 10;
    ObjectParameter errorCodeParameter = new ObjectParameter("ERROR_CODE", typeof(decimal));
    errorCodeParameter.Value = 12345;
    Console.WriteLine("before call errorCodeParameter.Value = " + errorCodeParameter.Value);
    // RefCursor output parameter implicitly bound via App.Config
    var queryResult = context.TestParameters(dept, errorCodeParameter);
    // should be 54321 and is ...
    Console.WriteLine("after call errorCodeParameter.Value = " + errorCodeParameter.Value + " (should be 54321!)");
    List<TestParameters_Result> deptEmployeesList = queryResult.ToList();
    Console.WriteLine("list size = {0}", deptEmployeesList.Count);
    for (int ii = 0; ii < deptEmployeesList.Count; ++ii)
    TestParameters_Result result = deptEmployeesList[ii];
    Console.WriteLine("EMPNO: " + result.EMPNO + "; ENAME: " + result.ENAME);
    output:
    after call errorCodeParameter.Value = 12345 (should be 54321!)
    list size = 3
    EMPNO: 7782; ENAME: CLARK
    EMPNO: 7839; ENAME: KING
    EMPNO: 7934; ENAME: MILLER
    errorCodeParameter.Value IS NOT CORRECTLY RETURNED!
    If there is no RefCursor then both outputs are identical i.e. the parameters are being passed in correctly and the problem is not with the 'IN OUT' parameter. Also same thing is true if ERROR_CODE is made an OUT parameter. Also tried changing the position of the parameter in the list but still get same problem i.e. works when OracleCommand but not when EF Model. Also note that the RefCursor results are correct for both types of call i.e. it is just a problem with the value of the 'IN OUT ERROR_CODE' parameter.
    I have also enabled debug stepping from Visual Studio 2010 into Oracle PL/SQL as described in
    "http://st-curriculum.oracle.com/obe/db/hol08/dotnet/debugging/debugging_otn.htm"
    and have verified by inspection that the correct values are being passed into the stored procedure and that the stored procedure is definitely setting the ERROR_CODE to 54321 prior to return.
    Most of our stored procedures have these type of parameters i.e. several IN params to configure the work of the stored procedure, an OUT NUMBER parameter for the Error_Code if any and a RefCursor for the result list.
    Is this a bug or a feature? Am I doing something wrong?

    Just to clarify ....
    If the ERROR_CODE parameter is made an 'OUT' parameter instead of an 'IN OUT' parameter the correct return value is given for the OracleCommand invocation but the WRONG value is still returned for the EF Model invocation i.e. just changing the parameter from 'IN OUT' to just 'OUT' does not fix the problem.

  • Using Refcursor in Callable Statement without using the Oracle Drivers

    Hello all,
    Is there anyway to have a stored procedure (Oracle 8i) return a refcursor to my CallableStatement without using the Oracle Thin drivers (i'm now using jdbcodbc). I've tried registering my out parameter with every possible type i can think of...REF, JAVA_OBJECT, OTHER, etc. but with no luck.
    Help!!!!

    Certainly...I connect to the database using the
    jdbcodbc driver and when i execute any of the code, i
    get the following error:
    java.sql.SQLException: [Oracle][ODBC][Ora]ORA-06550:
    line 1, column 7:
    PLS-00306: wrong number or types of arguments in call
    to 'PVISUAL_GET'
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored
    It's bombing on the line that i attempt to register
    OracleTypes.CURSOR. It works fine when i use the
    oracle thin drivers, but i want to get this puppy
    working with the JdbcOdbcDriver. Here's the code:
    CallableStatement dbCall =
    nt dbCall =
    (CallableStatement)connection.prepareCall("{ call
    PAK_VISUAL_GET.pvisual_get(?, ?, ?, ?, ?, ?) }");
    dbCall.setString(1, sessionKey);
    dbCall.setInt(2,
    l.setInt(2, Integer.parseInt(storedVizID));
    dbCall.registerOutParameter(3,
    arameter(3, OracleTypes.CURSOR);
    dbCall.registerOutParameter(4,
    arameter(4, OracleTypes.NUMBER);
    dbCall.registerOutParameter(5,
    arameter(5, OracleTypes.VARCHAR);
    dbCall.registerOutParameter(6,
    arameter(6, OracleTypes.NUMBER);
    dbCall.execute();when you don't use oracle thin driver, you cannot use the OracleTypes. but, instead use the java.sql.Types values.Replace dbCall.registerOutParameter(3, OracleTypes.CURSOR); with
    dbCall.registerOutParameter(3,java.sql.Types.OTHER). things should be fine.
    Ganesh

  • How to pass a refcursor to a java stored proc

    Hi all,
    Please forgive me as I am new to Java and JDeveloper....
    I want to pass a refcursor to a java stored proc. Does anyone know how to accomplish this?
    Thanks,
    dayneo

    Hi,
    As Avi has indicated, you can map ref cursor to java.sql.ResultSet
    here are Call Specs and a code snippet from chapter 3 in my book.
    procedure rcproc(rc OUT EmpCurTyp)
    as language java
    name 'refcur.refcurproc(java.sql.ResultSet[])';
    function rcfunc return EmpCurTyp
    as language java
    name 'refcur.refcurfunc() returns java.sql.ResultSet';
    * Function returning a REF CURSOR
    public static ResultSet refcurfunc () throws SQLException
    Connection conn = null;
    conn = DriverManager.getConnection("jdbc:oracle:kprb:");
    ((OracleConnection)conn).setCreateStatementAsRefCursor(true);
    Statement stmt = conn.createStatement();
    ((OracleStatement)stmt).setRowPrefetch(1);
    ResultSet rset = stmt.executeQuery("select * from EMP order by empno");
    // fetch one row
    if (rset.next())
    System.out.println("Ename = " + rset.getString(2));
    return rset;
    Kuassi

  • How to call refcursor in oracle forms

    How to fetch a column in oracle form by using DB prcedure's refcursor.
    There was not isseu to create and call the procedure in oracle forms but when I was trying to fetch
    a particular column and assing the value to text box, I got an error invalid reference.

    DECLARE
       TYPE emp_ref_cur IS REF CURSOR;
       v_emp_curs_qry   emp_ref_cur;
       v_sql            VARCHAR2 (32767);
       v_column1        VARCHAR2 (32767) := 'EMPNO';
       v_column2        VARCHAR2 (32767) := 'ENAME';
       TYPE emp_rec IS RECORD (
          empno   emp.empno%TYPE,
          ename   emp.ename%TYPE
       TYPE emp_rec_ty IS TABLE OF emp_rec;
       v_emps           emp_rec_ty;
    BEGIN
       v_sql := 'select ' || v_column1 || ',' || v_column2 || '  from emp ';
       OPEN v_emp_curs_qry FOR v_sql;
       FETCH v_emp_curs_qry
       BULK COLLECT INTO v_emps;
       CLOSE v_emp_curs_qry;
       FOR i IN v_emps.FIRST .. v_emps.LAST
       LOOP
          DBMS_OUTPUT.put_line ('Empno =' || v_emps (i).empno);
          DBMS_OUTPUT.put_line ('Ename =' || v_emps (i).ename);
       END LOOP;
    END;
    /i hope this is what you want ..

  • Mapping refcursors with object types in a procedure

    Hi all,
    I need some help regarding the mapping of refcursors with object types .
    Example: Procedure "A" has object types as input/output parameters which lies in the Web Method Application as a API.
    We are creating a procedure "B" which has ref cursors as input/ouput parameters
    which will map to the Procedure "A"'s object type parameters.
    It will be highly needful for the solution.
    Regards
    Saugata

    Your pseudocode has a lot of steps in it, but you didn't say which step you need help with. Since I already covered going from a nested table type to a refcursor, I'll assume you want an example that goes the other way now, like from a refcursor to a nested table type. Here's one ...
    SQL>
    SQL>
    SQL> set serveroutput on
    SQL>
    SQL> create type nested_table_type as table of varchar2(14) ;
      2  /
    Type created.
    SQL> show errors
    No errors.
    SQL>
    SQL>
    SQL> create function func
      2    ( p_cursor in sys_refcursor )
      3    return nested_table_type
      4  as
      5    v_nested_table nested_table_type ;
      6  begin
      7
      8    fetch p_cursor bulk collect into v_nested_table ;
      9    return( v_nested_table );
    10
    11  end;
    12  /
    Function created.
    SQL> show errors
    No errors.
    SQL>
    SQL> select func( cursor( select dname from dept ) ) as nested_table from dual ;
    NESTED_TABLE
    NESTED_TABLE_TYPE('ACCOUNTING', 'RESEARCH', 'SALES', 'OPERATIONS')If your cursor selects objects instead of simple data types, the code is pretty much the same.
    SQL> create type object_type as object ( c1 varchar2(14), c2 varchar2(13) );
      2  /
    Type created.
    SQL> show errors
    No errors.
    SQL>
    SQL> create type nested_table_type as table of object_type ;
      2  /
    Type created.
    SQL> show errors
    No errors.
    SQL>
    SQL>
    SQL>
    SQL> create function func
      2    ( p_cursor in sys_refcursor )
      3    return nested_table_type
      4  as
      5    v_nested_table nested_table_type ;
      6  begin
      7
      8    fetch p_cursor bulk collect into v_nested_table ;
      9    return( v_nested_table );
    10
    11  end;
    12  /
    Function created.
    SQL> show errors
    No errors.
    SQL>
    SQL> select
      2    func( cursor( select object_type( dname, loc ) from dept ) ) as object_table
      3  from dual ;
    OBJECT_TABLE(C1, C2)
    NESTED_TABLE_TYPE
      ( OBJECT_TYPE('ACCOUNTING', 'NEW YORK'),
        OBJECT_TYPE('RESEARCH', 'DALLAS'),
        OBJECT_TYPE('SALES', 'CHICAGO'),
        OBJECT_TYPE('OPERATIONS', 'BOSTON')
      )(NB I manually reformated the query results for clarity).

  • Refcursor returning image (BLOB type) from database

    Hi,
    Process : Invoke activity takes ID as input parameter and passes it to partner link (db adapter) which executes stored proc returning a ref cursor. SQL statement in stored proc - ref cursor has a column with BLOB type.
    Problem : Unable to return an image (defiined as BLOB type in database) through refcursor in BPEL.
    Error : Unable to convert XSD element Column whose JDBC type is BLOB to a corresponding XML document element.
    ORABPEL-11087
    XSD :
    <complexType name="RowSet">
    <sequence>
    <element name="Row" minOccurs="0" maxOccurs="unbounded" nillable="true">
    <complexType>
    <sequence>
    <element name="Column" maxOccurs="unbounded" nillable="true">
    <complexType>
    <simpleContent>
    <extension base="string">
    <attribute name="name" type="string" use="required"/>
    <attribute name="sqltype" type="string" use="required"/>
    </extension>
    </simpleContent>
    </complexType>
    </element>
    </sequence>
    </complexType>
    </element>
    </sequence>
    </complexType>
    Need Solution : To get an image (of BLOB type) into BPEL using ref cursor.
    Please let me know if you need any more information to get it working.
    Thanks and Regards,
    Rakesh

    Hi Rakesh,
    There are some notes you might want to refer :
    Note.423909.1      'java.lang.NumberFormatException' Signaled When Using Oracle LOB Family Column Types In ODI Datastores And Integration Interfaces:
         Note.423982.1      An "ORA-17410 No More Data to Read From Socket" Error Has Been Signaled From An ODI (Sunopsis) Integration Interface:
         Note.423768.1      Using Oracle Large Object (LOB) Datatype Columns In ODI Integration Interfaces:
         Note.744101.1      ORA-22835 Message Signaled When Using The OdiSqlUnload Tool In ODI:
         Note.424658.1      "ORA-00942" Message With Oracle Large Object (LOB) Datatype Fields In ODI Integration Interfaces:
         Note.423992.1      Using Oracle LONG Datatype Columns In ODI(Sunopsis):
         Note.424107.1      ODI Integration Interfaces And The Use Of Oracle Spatial Datatypes In Source And Target Datastores:
    Hope this helps!
    Cheers
    Anirudh Pucha

  • Error in calling Stored procedure returns REFCURSOR

    Hi,
    I've written a oracle stored procedure returning REFCURSOR. say,extractorderdespatchconfirmsp('','','','','','H1','ACG','','','','',:rc).
    Following statement throwing error.
    CallableStatement cs = con.PrepareCall("{extractorderdespatchconfirmsp('','','','','','H1','ACG','','','','',:rc)}");
    rs = cs.executeQuery();
    Could you rectify this problem and give me the currect code.
    riyaz

    Your naming convention leaves a little to be desired.
    String command = "{CALL extractorderdespatchconfirmsp(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
    CallableStatement cstmt = conn.prepareCall(command);
    //set the variables here ie, dates need to be a timestamp format. use set timestamp.
    cstmt.setInt(1, 2);
    cstmt.setString(2, "a string");
    cstmt.setInt(3, 0);
    //for return values
    cstmt.registerOutParameter(3, Types.INTEGER);
    cstmt.registerOutParameter(2, Types.INTEGER);
    cstmt.execute();
    int status = cstmt.getInt(3);
    int status2 = cstmt.getInt(2);
    cstmt.close();
    It took me awhile too to get JDBC to call these right.

Maybe you are looking for

  • "^1" showing up everywhere in iTunes

    Hello, I have a pretty weird problem. I've been an iTunes user for years and years and have never encountered anything like this before. Last night, I was using iTunes like normal, listening to music. When I went to skip to the next track, suddenly m

  • Dbms_sqltune

    Hi, I am using dbms_sqltune package for sql tuning in 10g. In DBMS_SQLTUNE.CREATE_TUNING_TASK one paramter is bind_list.i want to pass the parameter for sql.suppose two dates.Pls tell me how can i do. Thanks Reena

  • Missing plug in, upgrade plug in

    Hello, I have CS4, and I mainly use Photoshop and InDesign. I tried to open an InDesign file the other day and I can't. I've never had trouble with this before. This is the message I get: The document "..." uses one or more plug-ins which are not cur

  • Address book locking

    Is there option to lock notes in Address Book. Say that with a contact write a note, and after I can see this note only when enter the code? Maybe some master code for all the notes in address book? If not, it would be a great option for the upgrade.

  • Question about cisco nac agent

    When I deploy Cisco NAC appliance, the main different between using cisco nac appliance with or without agent? I see Cisco NAC agent has two function: scan and remediation. If Cisco NAC appliance without agent, Cisco NAC server will scan device and r