URGENT: VARRAY as Input/Output variable

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • KVN Chary

    URGENT: VARRAY as Input/Output variable

    I'm facing one problem with Varrays. I have to use Varrays as input
    and output parameters in a procedure. When I assign a value to
    Varray, Oracle errored out as and asking for Initialize the Varray.


    SQLcreate type acct_obj as object (acct_num varchar2(20),
    2 name1 varchar2(20)
    3 )
    4 /

    Type created.

    SQL>
    SQLcreate type acct_arr is VARRAY(6) OF acct_obj
    2 /

    Type created.

    SQL>
    SQLcreate type addr_obj as object (
    2 name1 varchar2(20),
    3 addr_line1 varchar2(30),
    4 addr_line2 varchar2(30),
    5 addr_line3 varchar2(30),
    6 city varchar2(20),
    7 state varchar2(2),
    8 zip varchar2(7)
    9 )
    10 /

    Type created.

    SQL>
    SQLcreate type addr_arr is VARRAY(6) OF addr_obj
    2 /

    Type created.

    SQL>
    SQLcreate type return_arr is VARRAY(6) of number(6)
    2 /

    Type created.

    SQL>
    SQL--=============== =============== ========
    SQL--Package Creation
    SQL--=============== =============== ========
    SQLCREATE OR REPLACE PACKAGE acct_retr AS
    2
    3 PROCEDURE find_addr (
    4 i_number IN NUMBER,
    5 i_name1 IN acct_arr,
    6 o_addr OUT addr_arr,
    7 o_return_code OUT return_arr
    8 );
    9 END acct_retr;
    10 /

    Package created.

    SQL>
    SQLCREATE OR REPLACE PACKAGE BODY acct_retr AS
    2
    3 error_in_input NUMBER(2) := 2;
    4
    5 PROCEDURE find_addr (
    6 i_number IN NUMBER,
    7 i_name1 IN acct_arr,
    8 o_addr OUT addr_arr,
    9 o_return_code OUT return_arr
    10 )
    11 IS
    12 Invalid_range EXCEPTION;
    13 BEGIN
    14 IF (NVL(i_number,0 ) <= 0 or i_number 6) THEN
    15 RAISE invalid_range;
    16 END IF;
    17 --
    18 -- Retrieve from database and fill address array and send account
    address
    19 -- array to the calling program
    20 -- ............
    21 EXCEPTION
    22 WHEN invalid_range THEN
    23 o_return_code(1 ) := error_in_input;
    24 o_addr := NULL;
    25 END find_addr;
    26
    27 END acct_retr;
    28 /

    Package body created.

    SQLdeclare
    2 i_number NUMBER(2):= NULL;
    3 i_name1 acct_arr;
    4 o_addr addr_arr;
    5 o_return_code return_arr;
    6 begin
    7 acct_retr.find_ addr(i_number, i_name1,
    8 o_addr, o_return_code);
    9 dbms_output.put _line(NVL(o_add r(1).name1, 'No Issuer'));
    10 dbms_output.put _line('Return Code '||o_return_cod e(1));
    11 end;
    12 /
    declare
    *
    ERROR at line 1:
    ORA-06531: Reference to uninitialized collection
    ORA-06512: at "OPS$UBTDEV.ACC T_RETR", line 23
    ORA-06510: PL/SQL: unhandled user-defined exception
    ORA-06512: at line 7

    Thanks for all helping me.
Working...