WebService procedure with dbms_output.chararr OUT Parameters

Hi everyone,
I'm using Oracle native web service and everything work fine. Anyway, we want to return the data through string array , Is it possible?
I already tried to create procedure as this script.
P_INPUT1 VARCHAR2,
P_INPUT2 VARCHAR2,
Result OUT dbms_output.chararr
Is it possible to wrap it as to web service because I cannot see the wsdl from this package or there are the limitation or any workaround to solve this problem.
Thank and regards,
zenoni

Hi,
Result OUT dbms_output.chararrUse SQL object types instead.
For example :
create or replace type my_collection is table of varchar2(4000);
create or replace type my_ot is object ( list my_collection );
create or replace procedure genList(p_val_max in number, result out my_ot)
is
begin
  -- return a collection of numeric strings from 1 to p_val_max
  select my_ot(
           cast(
             multiset(
               select to_char(level)
               from dual
               connect by level <= p_val_max
             as my_collection
  into result
  from dual;
end;
/results in the following WSDL :
<definitions name="GENLIST"
    targetNamespace="http://xmlns.oracle.com/orawsv/DEV/GENLIST"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns="http://xmlns.oracle.com/orawsv/DEV/GENLIST"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  <types>
    <xsd:schema targetNamespace="http://xmlns.oracle.com/orawsv/DEV/GENLIST"
     elementFormDefault="qualified">
      <xsd:element name="GENLISTInput">
        <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="RESULT-MY_OT-COUT">
                <xsd:complexType/>
              </xsd:element>
              <xsd:element name="P_VAL_MAX-NUMBER-IN" type="xsd:double"/>
            </xsd:sequence>
          </xsd:complexType>
      </xsd:element>
      <xsd:element name="GENLISTOutput">
        <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="RESULT" type="tns:MY_OTType"/>
            </xsd:sequence>
          </xsd:complexType>
      </xsd:element>
      <xsd:complexType name="MY_OTType">
        <xsd:sequence>
          <xsd:element name="MY_OT">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="LIST">
                  <xsd:complexType>
                    <xsd:sequence>
                      <xsd:element name="VARCHAR2" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/>
                    </xsd:sequence>
                  </xsd:complexType>
                </xsd:element>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:sequence>
      </xsd:complexType>
   </xsd:schema>
  </types>
  <message name="GENLISTInputMessage">
    <part name="parameters" element="tns:GENLISTInput"/>
  </message>
  <message name="GENLISTOutputMessage">
    <part name="parameters" element="tns:GENLISTOutput"/>
  </message>
  <portType name="GENLISTPortType">
  <operation name="GENLIST">
      <input message="tns:GENLISTInputMessage"/>
      <output message="tns:GENLISTOutputMessage"/>
    </operation>
  </portType>
  <binding name="GENLISTBinding"
           type="tns:GENLISTPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GENLIST">
      <soap:operation
soapAction="GENLIST"/>
      <input>
        <soap:body parts="parameters" use="literal"/>
      </input>
      <output>
        <soap:body parts="parameters" use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="GENLISTService">
    <documentation>Oracle Web Service</documentation>
    <port name="GENLISTPort" binding="tns:GENLISTBinding">
       <soap:address
             location="http://localhost:8080/orawsv/DEV/GENLIST"/>
     </port>
  </service>
</definitions>

Similar Messages

  • OCCI call PL/SQL Procedure with 2 IN/OUT Parameters..BUS ERROR!!

    Hi~ All,
    I am new user for using OCCI. Util now, I encountered a problem with OCCI when I call a procedure with 2 IN/OUT parameters. Then,I got an error(core dump), Why?
    CREATE OR REPLACE PROCEDURE demo_proc (v1 in integer, v2 in out varchar2, v3 in out varchar2);
    ==== OCCI Code ========
    stmt = conn->createStatement
    ("BEGIN demo_proc(:v1, :v2, :v3); END;");
    cout << "Executing the block :" << stmt->getSQL() << endl;
    stmt->setInt (1, 10);
    stmt->setString (2, "Test1");
    stmt->setString (3, "First");
    int updateCount = stmt->executeUpdate ();
    cout << "Update Count:" << updateCount << endl;
    cout << "Printing the INOUT & OUT parameters:" << endl;
    string c1 = stmt->getString (2);
    cout << c1 << endl;
    string c2 = stmt->getString (3);
    ==== RUN RESULT ====
    Bus error(coredump)
    But, If i just only got one of string from v1 or v2,I could get correct result!! Why? Does some one know how to avoid this two IN/OUT parameters issue?

    Hi~ Amoghavarsha,
    Thanks for your response! I solved the problem by myself. I found the root cause, it seems very strange in
    initializing environment variable.
    === FAILED ===
    Environment *env;
    === SUCCESS ===
    Environment *env = NULL; <---Why??
    cout << "occidml - createEnvironment" << endl;
    env = Environment::createEnvironment (Environment::OBJECT);
    Eventually, I fixed this issue in Win2K and HP-UX 11.
    Best Regards,

  • Executing a Procedure with IN and OUT parameters

    How do I call/execute the following procedure? When I call as Courses(StartDate,EndDate,nCount,State,LastUpdate);
    I get an error:
    Error(92,45): PLS-00363: expression 'nCount' cannot be used as an assignment target
    Error(92,55): PLS-00363: expression 'State' cannot be used as an assignment target
    PROCEDURE  Courses
       StartDate       IN             VARCHAR2
    ,  EndDate        IN             VARCHAR2
    ,  nCount           IN OUT   VARCHAR2
    ,  State               IN OUT   CHAR
    ,  LastUpdate   IN             DATE

    set serverout on
    declare
       l_StartDate    VARCHAR2(100) := '20130101';  -- why are you using varchar? use a date! you WILL regret using a string eventually
       l_EndDate      VARCHAR2(100) := '20140101';
       l_Count        VARCHAR2(100);   -- string, again? why? isn't a count a number?
       l_State        VARCHAR2(100);
       l_LastUpdate   DATE     :=  sysdate;
    begin
       Courses ( l_StartDate, l_EndDate, l_Count, l_State, l_LastUPdate );
       dbms_output.put_line ( 'Count: ' || l_Count );
       dbms_output.put_line ( 'State: ' || l_State );
    end;

  • Call from Java Plsql Procedure with VArray as Out Parameter

    Hi,
    I have a Java web application(Tomcat server) that call a plsql procedure with Varray as OUT parameter.
    The Plsql code is perfectly compiled.
    When i run the application, I get the following error msg in my Tomcat window:
    java.sql.SQLException: ORA-06530: Reference to uninitialized composite
    ORA-06512: at "SEMS1.PACK_SEMSADMIN_OFFEREDJOBS", line 102
    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:573)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:109
    3)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStat
    {color:#0000ff}
    Doubt: Do I need to declare ArrayDescriptors to retrieve the VArray from the Plsql procedure.
    I think the below statement is enough; we need ArrayDescriptors only when we we wish to send a Plsql Object or Varray from Java code to the procedure. Plz correct me if not so.
    dbCallableStatement.execute();
    ARRAY SimpleOUTArray = (ARRAY) ((OracleCallableStatement) dbCallableStatement).
    getObject(Integer.parseInt(arlParameterOutIndex.get(i).toString()));{color}
    I am unable to realize where the mistake is?
    {color:#800000}
    {color}{color:#800000}
    VARRAY AND PROC DETAILS:
    TYPE STRUCT_JOB_DETAILS AS OBJECT
    APPL_NO NUMBER (10),
    S_FNAME VARCHAR2 (32 Byte),
    S_MI VARCHAR2 (32 Byte),
    S_LNAME VARCHAR2 (32 Byte),
    APPL_DATE DATE,
    DESCRIPTION VARCHAR2 (100 Byte),
    S_UCID VARCHAR2 (8 Byte)
    TYPE VARRAY_JOB_DETAILS IS VARRAY(100) OF STRUCT_JOB_DETAILS;{color}
    {color:#800000}PROCEDURE:{color}
    {color:#800000}CREATE OR REPLACE PACKAGE PACK_SEMSADMIN_OFFEREDJOBS
    AS
    TYPE Generic_Cursor_Type IS REF CURSOR;
    --TYPE varray_job_detail is VARRAY(100) OF STRUCT_JOB_DETAILS;
    --va_varray_job_detail varray_job_detail := varray_job_detail();
    va_varray_job_detail VARRAY_JOB_DETAILS := VARRAY_JOB_DETAILS();
    PROCEDURE Admin_Jobs_Offered_Rtr
    ic_status IN VARCHAR2,
    or_offered_jobs OUT Generic_Cursor_Type,
    va_varray_job_detail OUT VARRAY_JOB_DETAILS
    CREATE OR REPLACE PACKAGE BODY PACK_SEMSADMIN_OFFEREDJOBS
    AS
    PROCEDURE Admin_Jobs_Offered_Rtr
    ic_status IN VARCHAR2,
    or_offered_jobs OUT Generic_Cursor_Type,
    va_varray_job_detail OUT VARRAY_JOB_DETAILS
    AS
    vc_query VARCHAR2(15000) := '';
    vc_query_1 VARCHAR2(15000) := '';
    counter NUMBER := 1;
    vc_no NUMBER := 0;
    or_applicants_list Generic_Cursor_Type;
    TYPE type_appln_list IS RECORD
    job_no NUMBER(10),
    job_title VARCHAR2(50 BYTE),
    account_no VARCHAR2(10 BYTE),
    head_fname VARCHAR2(32 BYTE),
    head_minitial VARCHAR2(10 BYTE),
    head_lname VARCHAR2(32 BYTE),
    num NUMBER
    vn_appln_list type_appln_list;
    TYPE type_job_offered IS RECORD
    APPL_NO NUMBER (10),
    S_FNAME VARCHAR2 (32),
    S_MI VARCHAR2 (32),
    S_LNAME VARCHAR2 (32),
    APPL_DATE DATE,
    DESCRIPTION VARCHAR2 (100),
    S_UCID VARCHAR2 (8)
    vn_job_offered type_job_offered;
    BEGIN
    vc_query := vc_query || ' SELECT jobs.job_no,job_title, account_no, head_fname, head_minitial, head_lname, num';
    vc_query := vc_query || ' FROM jobs, ( ' ;
    vc_query := vc_query || ' SELECT jobs.job_no,count(*) as num' ;
    vc_query := vc_query || ' FROM student_apps ,jobs ' ;
    vc_query := vc_query || ' WHERE jobs.job_no = student_apps.job_no' ;
    vc_query := vc_query || ' AND (student_apps.status in (''o'',''t'')) '; --|| ic_status || ')' ;
    vc_query := vc_query || ' AND jobs.status not in (''z'', ''Z'')' ;
    vc_query := vc_query || ' GROUP BY jobs.job_no' ;
    vc_query := vc_query || ' ) no_apps_off' ;
    vc_query := vc_query || ' WHERE jobs.job_no = no_apps_off.job_no' ;
    dbms_output.put_line('Executed Query_1');
    va_varray_job_detail := VARRAY_JOB_DETAILS();
    va_varray_job_detail.extend(100);
    OPEN or_offered_jobs FOR vc_query;
    LOOP
    FETCH or_offered_jobs INTO vn_appln_list;
    EXIT WHEN or_offered_jobs%NOTFOUND;
    vc_query_1 := '';
    vc_query_1 := vc_query_1 || ' SELECT stud_apps.appl_no APPL_NO, stud_apps.s_fname S_FNAME, ';
    vc_query_1 := vc_query_1 || ' stud_apps.s_mi S_MI, stud_apps.s_lname S_LNAME, ';
    vc_query_1 := vc_query_1 || ' stud_apps.appl_date APPL_DATE, look_up.description DESCRIPTION, ' ;
    vc_query_1 := vc_query_1 || ' stud_apps.s_ucid S_UCID ' ;
    vc_query_1 := vc_query_1 || ' FROM student_apps stud_apps,jobs jbs,lookup look_up' ;
    vc_query_1 := vc_query_1 || ' WHERE stud_apps.status in (''o'',''t'') '; --(' || ic_status || ') ' ;
    vc_query_1 := vc_query_1 || ' AND jbs.job_no = stud_apps.job_no' ;
    vc_query_1 := vc_query_1 || ' AND jbs.status not in (''z '', ''Z'')' ;
    vc_query_1 := vc_query_1 || ' AND stud_apps.status = look_up.code ' ;
    vc_query_1 := vc_query_1 || ' AND look_up.type = ''st''' ;
    vc_query_1 := vc_query_1 || ' AND stud_apps.job_no = ''' || vn_appln_list.job_no || ''' ' ;
    vc_query_1 := vc_query_1 || ' ORDER BY appl_date' ;
    dbms_output.put_line('Executed Query_2');
    OPEN or_applicants_list FOR vc_query_1;
    LOOP
    FETCH or_applicants_list INTO vn_job_offered;
    EXIT WHEN or_applicants_list%NOTFOUND;
    va_varray_job_detail(counter).APPL_NO := vn_job_offered.APPL_NO;
    va_varray_job_detail(counter).S_FNAME := vn_job_offered.S_FNAME;
    va_varray_job_detail(counter).S_MI := vn_job_offered.S_MI;
    va_varray_job_detail(counter).S_LNAME := vn_job_offered.S_LNAME;
    va_varray_job_detail(counter).APPL_DATE := vn_job_offered.APPL_DATE;
    va_varray_job_detail(counter).DESCRIPTION := vn_job_offered.DESCRIPTION;
    va_varray_job_detail(counter).S_UCID := vn_job_offered.S_UCID;
    counter := counter + 1;
    END LOOP; --end of FOR
    CLOSE or_applicants_list;
    END LOOP; -- end of FETCH
    END Admin_Jobs_Offered_Rtr;
    END PACK_SEMSADMIN_OFFEREDJOBS;
    /{color}
    Reqire help plzzzz !!!
    Thanks.

    Originally posted by JDBC Development Team:
    It's very similar to other datatype except that it uses OracleTypes.ARRAY typecode and the value is mapped to a oracle.sql.ARRAY instance. The code looks as follows --
    cstmt.registerOutParameter (idx, OracleTypes.ARRAY, "VARRAY_TYPE_NAME_HERE");
    cstmt.execute ();
    ARRAY array = (ARRAY) cstmt.getObject (idx);
    Thanks for your reply.
    I have to use:-
    OracleCallableStatement cs1 = (OracleCallableStatement )conn.prepareCall
    ( "{call proj_array(?)}" ) ;
    for retrieving a collection as an OUT parameter.
    This gives me the errors:-
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Blob getBlob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Array getArray(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Clob getClob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Ref getRef(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    How do I get rid of these errors?
    null

  • Can Stored procedure with IN and OUT Paramter can be used in JDBC LOOKUP?

    can Stored procedure with IN and OUT Paramter can be used in JDBC LOOKUP?

    Checking online help, I do not see any possibility.
    "Queries a data base by the given SQL statement."
    http://help.sap.com/javadocs/pi/pi711sp03/com/sap/aii/mapping/lookup/DataBaseAccessor.html
    -> execute

  • Stored procedure with cursor as out parameter

    Can any one help me by showing how to write a procedure with cursor as out parameter and caputuring it in java using jdbc.
    Thanks in advance,
    shravan bharadwaj

    I know that in the SQLJ distribution (which is also downloadable) there is an example in the demo directory called RefCursDemo that shows the SQL code and how to call it - albeit from SQLJ and not JDBC. There may also be a demo in the JDBC distribution, though I am not sure about that.

  • Create procedure with IN and  OUT, what is IN+OUT?

    Hi.
    from docs:
    IN
    Specify IN to indicate that you must supply a value for the argument when calling the procedure.
    OUT
    Specify OUT to indicate that the procedure passes a value for this argument back to its calling environment after execution.
    IN OUT
    Specify IN OUT to indicate that you must supply a value for the argument when calling the procedure and that the procedure passes a value back to its calling environment after execution.
    As I understand like in oop IN - passing parameter by value, out-by reference. But IN OUT? d:/

    Gets passed in with one value, comes out with another.
    create or replace procedure calcarea (x in out number)
    as
    begin
    x:=x*x;
    end;
    create or replace procedure output (oneside in number)
    as
    myinput number;
    area number;
    begin
    myinput := oneside;
    calcarea(myinput);
    dbms_output.put_line('The area in sq units is '||myinput);
    end;
    set serveroutput on
    exec output(5);Note how the area is passed out via the same parameter.

  • Procedure with IN and OUT date parameters

    Hello Guys,
    could you please tell me where i am doing wrong, i want to get or return the date from the below procedure. It is throwing below error when i try to execute it, appreciate your help.
    Execute Statement:
    exec get_nxt_trd_dt('09/03/2010')
    Error Message:
    PLS-00306: wrong number or types of arguments in call to 'GET_NXT_TRD_DT'
    Procedure Body:
    CREATE OR REPLACE PROCEDURE GET_NXT_TRD_DT
    (INPUT_DT IN DATE,OUTPUT_DT OUT DATE) IS
    BEGIN
    SELECT MIN(DATES) INTO OUTPUT_DT FROM (SELECT DISTINCT DATES FROM (
    SELECT * FROM
    SELECT TRUNC(TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'yyyymmdd'),'Y')+ROWNUM -1 DATES FROM
    SELECT 1
    FROM Dual
    GROUP BY CUBE (2, 2, 2, 2, 2, 2, 2, 2, 2)
    WHERE ROWNUM <= ADD_MONTHS(TRUNC(TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD'),'Y'),24) - TRUNC(TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD'),'Y')
    WHERE TO_CHAR( DATES, 'DY') NOT IN ('SAT','SUN')
    MINUS
    SELECT DISTINCT HOLIDAY_DATE FROM HOLIDAY )
    WHERE DATES BETWEEN TO_DATE('08/01/2010','MM/DD/YYYY') AND TO_DATE('09/30/2010','MM/DD/YYYY')
    WHERE DATES > TO_DATE(INPUT_DT,'MM/DD/YYYY');
    END;

    That worked thank you. Could you please help on the below, how to execute the same plsql block defined as function?? Thank you.
    Execute stmts used:
    (1)
    DECLARE
    DT DATE;
    BEGIN
    GET_NXT_TRD_DT(TO_DATE('09/03/2010','MM/DD/YYYY'),DT);
    END;
    Error Message: PLS-00221: 'GET_NXT_TRD_DT' is not a procedure or is undefined
    (2)
    DECLARE
    BEGIN
    GET_NXT_TRD_DT(TO_DATE('09/03/2010','MM/DD/YYYY'));
    END;
    Error Message: PLS-00306: wrong number or types of arguments in call to 'GET_NXT_TRD_DT'
    Function Body:
    CREATE OR REPLACE FUNCTION GET_NXT_TRD_DT
    (INPUT_DT IN DATE,OUTPUT_DT OUT DATE) RETURN DATE IS
    BEGIN
    SELECT MIN(DATES) INTO OUTPUT_DT FROM (SELECT DISTINCT DATES FROM (
    SELECT * FROM
    SELECT TRUNC(TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'yyyymmdd'),'Y')+ROWNUM -1 DATES FROM
    SELECT 1
    FROM Dual
    GROUP BY CUBE (2, 2, 2, 2, 2, 2, 2, 2, 2)
    WHERE ROWNUM <= ADD_MONTHS(TRUNC(TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD'),'Y'),24) - TRUNC(TO_DATE(TO_CHAR(SYSDATE,'YYYYMMDD'),'YYYYMMDD'),'Y')
    WHERE TO_CHAR( DATES, 'DY') NOT IN ('SAT','SUN')
    MINUS
    SELECT DISTINCT HOLIDAY_DATE FROM HOLIDAY )
    WHERE DATES BETWEEN TO_DATE('08/01/2010','MM/DD/YYYY') AND TO_DATE('09/30/2010','MM/DD/YYYY')
    WHERE DATES > INPUT_DT;
    RETURN(OUTPUT_DT);
    END;
    /

  • Procedure with table type out parameter

    Hi,
    I need to create a procedure which gives back a content of a table as an out parameter.
    i have tried something like below code
    it might not be correct since i am writing from home and cannot access any oracle db right now
    create or replace procedure test (
    table_out test_table%rowtype
    ) as
    type table_out test_table%rowtype
    begin
    select * into table_out
    from test_table
    where country = 'HUN';
    end;
    compile doesnt gives error, but when running it i get error
    declare
    table_out test_table%rowtype
    begin
    test( table_out );
    dbms_output.put_line( table_out );
    end;
    but it fails, could you help how to solve the above problem and call the proc correctly?
    thanks in advance

    Well you said you want the content of a table but your example says you just want a record. So for a record:
    CREATE OR REPLACE PROCEDURE sp_test (EMP_REC OUT EMP%ROWTYPE) IS
    BEGIN
        select * into emp_rec from emp where empno = 7369;
    END;The anonymous block to run it might be:
    declare
    tab_out emp%rowtype;
    begin
    sp_test(tab_out);
    dbms_output.put_line(tab_out.ename);
    end;As damorgan said the dbms_output can't be used with the record type. Notice I used it for the ENAME value of the record.
    If you really want the entire table then do it the way damorgan suggests. A pipeline function can give you the table but not as an OUT parameter.

  • With JDBC, calling a stored procedure with ARRAY as out parameter

    Hi,
    I want to use the data type ARRAY as an out parameter in an Oracle stored procedure. I want to call the stored procedure from
    my java program using JDBC.
    The problem it's i use a 8.1.7 client to acces with oci to a 7.1.3 Database.
    With this configuration I can get back a Cursor but not an Array.
    Does it's possible ?
    Thanks for your help !
    Michakl

    Originally posted by JDBC Development Team:
    It's very similar to other datatype except that it uses OracleTypes.ARRAY typecode and the value is mapped to a oracle.sql.ARRAY instance. The code looks as follows --
    cstmt.registerOutParameter (idx, OracleTypes.ARRAY, "VARRAY_TYPE_NAME_HERE");
    cstmt.execute ();
    ARRAY array = (ARRAY) cstmt.getObject (idx);
    Thanks for your reply.
    I have to use:-
    OracleCallableStatement cs1 = (OracleCallableStatement )conn.prepareCall
    ( "{call proj_array(?)}" ) ;
    for retrieving a collection as an OUT parameter.
    This gives me the errors:-
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Blob getBlob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Array getArray(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Clob getClob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Ref getRef(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    How do I get rid of these errors?
    null

  • Error while executing procedure having IN and OUT parameters

    Hi,
    I will be really gratified if someone can please help me in solving with the following problem.
    I have one procedure given below
    create or replace procedure abcd1april (
                                            nd_in                IN varchar2,
                                            sal_in           IN number,
                                            success_out      OUT number,
                                            error_code_out OUT number,
                                            error_msg_out      OUT varchar2
    AS
    old_sal number;
    cursor H7 is select SERV_ACC_LINK_CODE_N from pair_bkup where PAIRE_STATUS in (3,4) and nd=nd_in;
    BEGIN
         old_sal:=0;
         open H7;
         fetch H7 into old_sal;
         close H7;
         if old_sal=0
         then
              success_out:=0;
              error_code_out:=01;
              error_msg_out:='Check this error';
         else
                   update pair_bkup set SERV_ACC_LINK_CODE_N=sal_in where nd=nd_in and SERV_ACC_LINK_CODE_N=old_sal;
         success_out:=1;
              error_code_out:=00;
              error_msg_out:='NO ERROR IS THERE';
         end if;
    EXCEPTION
              WHEN OTHERS
              THEN
              success_out:=0;
              error_code_out:=SQLCODE;
              --error_msg_out:=SQLERRM;                                                                                                                 
    END;     
    Now when i try to execute this script it throws an error given below:-
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    ORA-06512: at "TELMATEST.ABCD1APRIL", line 39
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small
    Now i am executing this procedure by following script:-
    DECLARE
              nd_in_n VARCHAR2(10);
              sal_in_n NUMBER;
              success_out_n NUMBER;
              error_code_out_n NUMBER;
              error_message_out_n VARCHAR2(10);
    BEGIN
         nd_in_n := '';
         sal_in_n:= 0;
         success_out_n := 0;
         error_code_out_n:= '';
         error_message_out_n := '';
    abcd1april('02022',3,success_out_n,error_code_out_n,error_message_out_n);
    insert into errormsgs values(&error_code_v,'error_message_v');
    END ;
    Now please help me in above case.
    Regards
    Gursimran Singh

    Gursimran,
    The error message tells you what you need to know -
    ORA-06502: PL/SQL: numeric or value error: character string buffer too small.You're calling the procedure and supplying
    error_message_out_n VARCHAR2(10);In each case, the message 'Check this error', 'NO ERROR IS THERE' or SQLERRM is longer than 10 characters - therefore the error.
    Try it with
    error_message_out_n VARCHAR2(1000);Cheers,
    Bryan.

  • Calling a Stored Procedure with a IN OUT VAR

    Hi
    I'm trying to call an oracle stored procedure and get a return code if it completely ran successfully. This is my first time doing this and would really appreciate some
    PROCEDURE P_NP_OVERDUE_COMPLETED
    (P_YEAR_NO IN NUMBER, P_WEEK_NO IN NUMBER,
    P_RETURN_CODE IN OUT VARCHAR2)
    I get the following error: One or more errors occurred during processing of command.
    Dim OleDBCon As New OleDbConnection
    Dim conStr As String = "Provider=MSDAORA;Data...................."
    OleDBCon.ConnectionString = conStr
    Dim OleDBCMD = New OleDbCommand _
    ("{call p_np_overdue_completed(?,?,{VARCHAR2(255), P_RETURN_CODE})}", OleDBCon)
    OleDBCMD.CommandType = CommandType.Text
    OleDBCMD.Parameters.Add("P_YEAR_NO", OleDbType.Numeric).Value = year
    OleDBCMD.Parameters.Add("P_WEEK_NO", OleDbType.Numeric).Value = i
    Dim myadapter As New OleDbDataAdapter(OleDBCMD)
    OleDBCon.Open()
    myadapter.Fill(ds)

    Originally posted by JDBC Development Team:
    It's very similar to other datatype except that it uses OracleTypes.ARRAY typecode and the value is mapped to a oracle.sql.ARRAY instance. The code looks as follows --
    cstmt.registerOutParameter (idx, OracleTypes.ARRAY, "VARRAY_TYPE_NAME_HERE");
    cstmt.execute ();
    ARRAY array = (ARRAY) cstmt.getObject (idx);
    Thanks for your reply.
    I have to use:-
    OracleCallableStatement cs1 = (OracleCallableStatement )conn.prepareCall
    ( "{call proj_array(?)}" ) ;
    for retrieving a collection as an OUT parameter.
    This gives me the errors:-
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Blob getBlob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Array getArray(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Clob getClob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Ref getRef(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    How do I get rid of these errors?
    null

  • How to call (in PL/SQL) a Procedure with a VARRAY OUT parameter

    Please help, I always get this error:
    PLS-00306: wrong number or types of arguments in call to 'GET_ITEM'
    It's a simple procedure, what is wrong?
    create or replace
    package XXVDF_XPOS_NEW_SALE_TEST as
         type serial_nos               is varray(200)     of     varchar2(20);
    procedure get_item
    (P_SERIALS           IN serial_nos);
    end XXVDF_XPOS_NEW_SALE_TEST;
    create or replace
    package body XXVDF_XPOS_NEW_SALE_TEST as
    procedure get_item
         (P_SERIALS          IN serial_nos)
    is
    begin
         p_serials(1) := 'sdw';
    end get_item;
    end XXVDF_XPOS_NEW_SALE_TEST;
    declare
         type serial_nos               is varray(200) of     varchar2(20);
         P_SERIALS          serial_nos := serial_nos();
    begin
    null;
         XXVDF_XPOS_NEW_SALE_TEST.get_item(P_SERIALS);
         dbms_output.put_line('P_SERIAL_NUMBERS ' ||P_SERIALS(1));
    end;
    thanks, Steve White

    Correction those INs should say OUT:
    create or replace
    package XXVDF_XPOS_NEW_SALE_TEST as
         type serial_nos               is varray(200)     of     varchar2(20);
    procedure get_item
    (P_SERIALS           OUT serial_nos);
    end XXVDF_XPOS_NEW_SALE_TEST;
    create or replace
    package body XXVDF_XPOS_NEW_SALE_TEST as
    procedure get_item
         (P_SERIALS          OUT serial_nos)
    is
    begin
         p_serials(1) := 'sdw';
    end get_item;
    end XXVDF_XPOS_NEW_SALE_TEST;
    declare
         type serial_nos               is varray(200) of     varchar2(20);
         P_SERIALS          serial_nos := serial_nos();
    begin
    null;
         XXVDF_XPOS_NEW_SALE_TEST.get_item(P_SERIALS);
         dbms_output.put_line('P_SERIAL_NUMBERS ' ||P_SERIALS(1));
    end;
    ========
    XXVDF_XPOS_NEW_SALE_TEST.get_item(P_SERIALS);
    ERROR at line 7:
    ORA-06550: line 7, column 2:
    PLS-00306: wrong number or types of arguments in call to 'GET_ITEM'
    ORA-06550: line 7, column 2:
    PL/SQL: Statement ignored

  • How to execute a procedure with Object as OUT parameter

    Hi,
    I have a procedure and it consists 2 parameter, one is an input parameter and that is some ID (NUMBER datatype) and 2nd parameter is an out parameter and it an Object type. I want to execute that procedure but not able to do the same. Can anyone please suggest me how do I execute a procedure which has got Object as an out parameter.
    Thanks a lot in advance for your support.

    Example:
    SQL> create or replace type t_obj as object (ename varchar2(10), deptno number);
      2  /
    Type created.
    SQL> ed
    Wrote file afiedt.buf
      1  create or replace procedure myproc (p_empno in number, obj out t_obj) is
      2  begin
      3    select t_obj(ename, deptno)
      4    into obj
      5    from emp
      6    where empno = p_empno;
      7* end;
    SQL> /
    Procedure created.
    SQL> set serverout on
    SQL> declare
      2    v_obj t_obj;
      3  begin
      4    myproc(7788, v_obj);
      5    dbms_output.put_line(v_obj.ename||','||v_obj.deptno);
      6  end;
      7  /
    SCOTT,20
    PL/SQL procedure successfully completed.

  • Calling a stored procedure with VARRAY as out parameter using JDBC

    Hi,
    I want to use the data type VARRAY as an out parameter in an Oracle stored procedure. I want to call the stored procedure from
    my java program using JDBC.
    I'm using Oracle 8.1.5 for Windows NT.
    Please help me.
    Thanks
    Sumanta
    null

    Originally posted by JDBC Development Team:
    It's very similar to other datatype except that it uses OracleTypes.ARRAY typecode and the value is mapped to a oracle.sql.ARRAY instance. The code looks as follows --
    cstmt.registerOutParameter (idx, OracleTypes.ARRAY, "VARRAY_TYPE_NAME_HERE");
    cstmt.execute ();
    ARRAY array = (ARRAY) cstmt.getObject (idx);
    Thanks for your reply.
    I have to use:-
    OracleCallableStatement cs1 = (OracleCallableStatement )conn.prepareCall
    ( "{call proj_array(?)}" ) ;
    for retrieving a collection as an OUT parameter.
    This gives me the errors:-
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Blob getBlob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Array getArray(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Clob getClob(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    C:\jdbc\VarraySQL.java:0: The method oracle.jdbc2.Ref getRef(int) declared in class oracle.jdbc.driver.OracleCallableStatement cannot override the method of the same signature declared in interface java.sql.CallableStatement. They must have the same return type.
    import java.sql.*;
    ^
    How do I get rid of these errors?
    null

Maybe you are looking for

  • Audit Log Report generating an "Out of Memory" error message.

    Greetings. We are a new IDM customer. We are running IDM 6.0 with an Oracle database. We are now getting the following error message when we run the IDM Audit Log Report for Today's Activities: "java.lang.OutOfMemoryError". How do we increase the mem

  • How to Uninstall an installed package

    I was trying to access a site that required ActiveX and downloaded and installed an application which was supposed to enable it. However it doesn't work. I tried to uninstall via the Installer but there isn't an option to do that. How is the best way

  • CS6 Bridge

    When I edit an image that is displayed in Bridge and add codes for me to decypher after image file name, ie IMG1234.jpg-original name to IMG1234cze.jpg edited filename, Bridge places edited image at end of Category file folder not in alpahbetical ord

  • Dynamically changing the content of the block

    Hi, We have a requirement as below : The form contains two blocks. The main block contains a dropdown which will show a list of tables (like emp, dept..etc). When the user will select a particular table, the second block should show the columns of th

  • Hide screen in bdc

    Hi i am writing DBC program  for f-02 ,code is follows,all the posting is going well i wont hide the screen in bcd (direct post the transaction with out user interfere ) .how can i do it perform bdc_dynpro      using 'SAPMF05A' '0100'. perform bdc_fi