Table type

Hi, I have problems creating a table type to work with XMLType, here is a sample of my code

1 declare
2
T_linha_xml TYPE 3 IS RECORD (documento CLOB);
4 type t_tab_xml is table of the t_linha_xml;
t_tab_xml tabela_documento 5;
6 v_root XMLType;
7
Start 8
9
10
11 v_root: = sys.xmltype.createXML ("< API_SP_SOAP_OUT > < / API_SP_SOAP_OUT > '");
12 tabela_documento (1) .documento: = ' < API_SP_SOAP_OUT > < / API_SP_SOAP_OUT > ';
13
14 end;


The error is
Error on line 1
ORA-06531: Reference to an uninitialized collection
ORA-06512: at the level of line 12

Can someone help please, I have never worked with before table types.

Best regards
João Lopes

Dear João Lopes!

You must initialize a collection until you can use it. Please change your code as follows:

DECLARE
 TYPE t_linha_xml IS RECORD (documento CLOB);
 type t_tab_xml is table of t_linha_xml;
 tabela_documento t_tab_xml;
 v_root XMLType;
BEGIN
-- This will initialize the collection
  tabela_documento := t_tab_xml();
  v_root := sys.xmltype.createXML('');
-- Extend the collection
  tabela_documento.EXTEND(2);
  tabela_documento(1).documento := '';
END;

Yours sincerely

Florian W.

Tags: Database

Similar Questions

  • Error in initialization of multilevel nested table type

    Hello

    Database version: Oracle 11 g R2

    I am creating a complex process I need to create complex nested table types and use them in code.

    {code}

    CREATE or REPLACE TYPE ws_data_compare_rt

    AS AN OBJECT

    (

    external_web_service_id NUMBER (10),

    service_code VARCHAR2 (30),

    ws_bridging_id NUMBER (10),

    ws_attribute_name VARCHAR2 (64).

    ws_attribute_value VARCHAR2 (32767).

    in_source_attribute VARCHAR2 (30),

    in_source_value VARCHAR2 (32767).

    comparison_rule VARCHAR2 (100)

    );

    CREATE or REPLACE TYPE ws_data_compare_tt IS TABLE OF THE ws_data_compare_rt;

    CREATE or REPLACE TYPE ws_data_compare_master_rt

    AS AN OBJECT

    (

    key_attribute_1 VARCHAR2 (30),

    NUMBER of key_attribute1_value

    key_attribute_2 VARCHAR2 (30),

    NUMBER of key_attribute2_value

    m_ws_data_compare_tt ws_data_compare_tt

    );

    /

    CREATE or REPLACE TYPE ws_data_compare_master_tt IS TABLE OF THE ws_data_compare_master_rt;

    {code}

    The objects have been created successfully. However when I use it in my code, I need to initialize them, but I get an error for the variable of ws_data_compare_master_tt type initialization.

    {code}

    ...

    g_ws_data_compare_rt ws_data_compare_rt: = ws_data_compare_rt (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

    g_ws_data_compare_tt ws_data_compare_tt: = ws_data_compare_tt();

    g_ws_data_compare_master_rt ws_data_compare_master_rt: = ws_data_compare_master_rt (NULL, NULL, NULL, NULL, g_ws_data_compare_tt);

    g_ws_data_compare_master_tt ws_data_compare_master_tt: = ws_data_compare_master_tt();

    ...

    {code}

    I'm unable to initialize the variable g_ws_data_compare_master_tt of type ws_data_compare_master_tt that I get the below error.

    For PACKAGE BODY UTL compile errors. PKG_WS_UTIL

    Error: PLS-00222: no function with name 'WS_DATA_COMPARE_MASTER_TT' does exist in this scope

    Line: 28

    Text: g_ws_data_compare_master_tt ws_data_compare_master_tt: = ws_data_compare_master_tt();

    Error: PL/SQL: ignored element

    Line: 28

    Text: g_ws_data_compare_master_tt ws_data_compare_master_tt: = ws_data_compare_master_tt();

    Can someone help me to find out what is the problem?

    Thanks in advance.

    Kind regards

    Natarajan

    Ah, I found the problem on my own. It was because of a bad statement similarly variable g_ws_data_compare_master_tt in a table in the specification of the package that was trouble. However I wonder the error returned Oracle was not fully exposed.

    Kind regards

    Natarajan

  • PLS-00201 in the table type declaration

    Hello world

    I want to create a line of some of my table type table type.

    For example:

    create or replace type tmp_Road is table of the XUXUEHAN.tbl_Road%rowtype

    But I PLS-00201: identifier 'XUXUEHAN.tbl_Road' must be declared.

    Where am I wrong? Thank you :-)

    Hi, rp0428.

    I read your page

    But, the way I called the function package-"select * from table (text_x.get('1')); -It's like the way you did-' select * from table (pkg4.get_emp (20));

    But the compiler tell me "types of data not valid."  I don't really understand why. Please help me, thanks :-)

  • Not able to manage the value 'Table Type' in my procedure, humble need help here

    Hi all

    I am facing a problem with below pl/sql block. The time I run it it works fine, but when I run the procedure only from the exact values (hardcoded), it throws error as below.

    [Error] Execution (38: 1): ORA-06550: line 2, column 1:

    PLS-00306: wrong number or types of arguments in the call to 'CREATE_ABNORMAL_BY_TRADER '.

    ORA-06550: line 2, column 1:

    PL/SQL: Statement ignored

    What I understand problem is, I use a Type of table herewhich works very well with my Pl/Sql block, but do not work when I run the same procedure of the value hard-coded.

    Please guide me how to handle this situation.

    Pl/Sql block [works absolutely well]:

    Declare

    lv_eff_from_dt DATE;
    lv_eff_to_date DATE;
    v_severity_codes_wl param_tbl: = param_tbl();
    lv_algo_id_wl sagedbo.alerts.algo_id%TYPE;

    Begin

    lv_eff_from_dt: = sage_utility.get_transaction_date('EFF_FROM_DATE');  -' 05-Aug-2013. '
    lv_eff_to_date: = sage_utility.get_transaction_date('EFF_TO_DATE');       -' 04-sep-2013. '

    lv_algo_id_wl: = sage_utility.get_code_values('ALERT_MODELS','GRAY_LIST');  -GLABNORMAL

    v_severity_codes_wl: = sage_utility.get_multi_parameter_value(1,'SEVERITY_CODE_WL'); -4.5

    SONARDBO.sage_generate_alert.create_abnormal_by_trader (lv_algo_id_wl, v_severity_codes_wl, lv_eff_from_dt, lv_eff_to_date, 'US');

    End;

    Pl/Sql block [does not] (by the way the same values but hard)

    Begin

    SONARDBO.sage_generate_alert.create_abnormal_by_trader ('GLABNORMAL', '4', 5, 5 August 2013 ', ' 04-Sep-2013', 'US');

    End;

    Error PLS-00306: wrong number or types of arguments in the call to 'CREATE_ABNORMAL_BY_TRADER '.

    I'm sorry that my question is not so generic, you cannot run on your computer. How should just guide me with the concept, I treat the values in table hardcodedly? (For testing of use)

    Thank you very much

    If your passage of type table, then you will need to run as below

    Begin

    SONARDBO.sage_generate_alert.create_abnormal_by_trader ("GLABNORMAL", param_tbl (' 4 ', ' 5'), August 5, 2013 ', ' 04-Sep-2013', 'US');

    End

    Means that you must call with the table type ("' hard coded values"). Here is the simple test. Take a look at this

    SQL > CREATE or REPLACE the TYPE nt_tab IS TABLE OF VARCHAR2 (50);

    2.

    Type of creation.

    SQL > CREATE OR REPLACE PROCEDURE test_proc (p_nttab nt_tab)

    2 AS

    3 v_nttab nt_tab: = p_nttab;

    4 BEGIN

    5 FOR me in 1.v_nttab. COUNTY

    6 LOOP

    7 DBMS_OUTPUT. Put_line (v_nttab (i));

    8 END OF LOOP;

    9 END;

    10.

    Created procedure.

    -Perform the procedure with only one value of type table

    SQL > EXEC test_proc (nt_tab ('KING'));

    KING

    PL/SQL procedure successfully completed.

    -Run procedure with the multi-value table type

    SQL > EXEC test_proc (nt_tab ('KING', 'AAAA', 'BBBB'));

    KING

    ABDELKADER

    BENAMER

    PL/SQL procedure successfully completed.

    Post edited by: 000000

    Post edited by: 000000

  • The assignment of values of Table type error

    Hello

    I'm trying to insert values for a Collection type, while doing that I am faced with an error.
    " PLS-00306: wrong number or types of arguments in call to
     'XXSCP_AVL_CSP_SQR_O_TP' "
    My statement of collection type PFB and and assignment.

    Object type:
    TYPE XXSCP_AVL_CSP_SQR_O_TP AS                  
    OBJECT  (                                       
                PLAN_ID             NUMBER,         
                SR_INSTANCE_ID      NUMBER,         
                INVENTORY_ITEM_ID   NUMBER,         
                BASE_ITEM_ID        NUMBER,              
                 ITEM_NAME           VARCHAR2(50),       
                 SUPPLIER_ID         NUMBER,             
                SUPPLIER_SITE_ID    NUMBER,         
                NORMAL_BUY_USAGE    VARCHAR2(5),    
                AVAILABLE_QUANTITY  NUMBER ,        
                SPL_PEG_FLAG        VARCHAR2(10),   
                SQR_LINE_ID         VARCHAR2(2000), 
                SQR_NUMBER          VARCHAR2(2000), 
                SQR_MOQ             NUMBER,         
                BPA_PO_LINE_ID      NUMBER,         
                SUGG_BPA_NUMBER     VARCHAR2(30),   
                BPA_BUY_PRICE_BASIS VARCHAR2(10),   
                BPA_LINE_NUM        NUMBER,         
                BPA_PO_LINE_LOC_ID  NUMBER,         
                BPA_CURRENCY_CODE   VARCHAR2(10),   
                BPA_PRICE           NUMBER,         
                BPA_PO_HEADER_ID    NUMBER,         
                BPA_EXPIRATION_DATE DATE,           
                BPA_QUANTITY        NUMBER,         
                ORIG_AVAILABLE_QTY  NUMBER          
            );        
    
    Table type :
    
    TYPE XXSCP_AVL_CSP_SQR_C_TP AS TABLE OF XXSCP_AVL_CSP_SQR_O_TP;
    Statement:
     l_tab_avl_csp_sqr   XXSCP_AVL_CSP_SQR_C_TP := XXSCP_AVL_CSP_SQR_C_TP();
    Assignment to the body:
    l_tab_avl_csp_sqr.EXTEND(1);
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT) := XXSCP_AVL_CSP_SQR_O_TP();
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).plan_id           := l_tab_planorders (i).l_num_plan_id;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).sr_instance_id    := l_tab_planorders (i).l_num_sr_instance_id;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).inventory_item_id := l_tab_planorders (i).l_num_inventory_item_id;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).base_item_id      := l_tab_planorders (i).l_num_base_item_id;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).item_name         := l_tab_planorders (i).l_chr_item_name;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).supplier_id       := l_tab_planorders (i).l_num_supplier_id;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).supplier_site_id  := l_tab_planorders (i).l_num_supplier_site_id;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).available_quantity := l_rec_pegged_list (j).remaining_aval_qty;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).spl_peg_flag       := 'Y';
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).sqr_line_id        := l_rec_pegged_list (j).sqr_line_id;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).sqr_number         := l_rec_pegged_list (j).sqr_number;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).sqr_moq            := l_rec_pegged_list (j).sqr_moq;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).bpa_po_line_id     := l_rec_pegged_list (j).bpa_po_line_id;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).sugg_bpa_number    := l_rec_pegged_list (j).bpa_number;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).bpa_buy_price_basis := l_rec_pegged_list (j).bpb_type;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).bpa_line_num        := l_rec_pegged_list (j).bpa_line_num;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).bpa_po_line_loc_id  := l_rec_pegged_list (j).bpa_lloc_id;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).bpa_currency_code   := l_rec_pegged_list (j).bpa_curr_code;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).bpa_price           := l_rec_pegged_list (j).bpa_price;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).bpa_expiration_date := l_rec_pegged_list (j).bpa_expiration_date ;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).bpa_quantity        := l_rec_pegged_list (j).bpa_quantity ;
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT).orig_available_qty  := l_rec_pegged_list (j).remaining_aval_qty ;
    Can anyone help with this.

    Thanks in advance,
    Rakesh

    Published by: Vincent Rakesh on April 24, 2013 12:18 AM

    You must add a vacuum-arg set constructor to your type to use, user l_tab_avl_csp_sqr (l_tab_avl_csp_sqr. "COUNTY): = XXSCP_AVL_CSP_SQR_O_TP();

    create or replace
    TYPE XXSCP_AVL_CSP_SQR_O_TP AS
    OBJECT  (
                PLAN_ID             NUMBER,
                SR_INSTANCE_ID      NUMBER,
                INVENTORY_ITEM_ID   NUMBER,
                BASE_ITEM_ID        NUMBER,
                 ITEM_NAME           VARCHAR2(50),
                 SUPPLIER_ID         NUMBER,
                SUPPLIER_SITE_ID    NUMBER,
                NORMAL_BUY_USAGE    VARCHAR2(5),
                AVAILABLE_QUANTITY  NUMBER ,
                SPL_PEG_FLAG        VARCHAR2(10),
                SQR_LINE_ID         VARCHAR2(2000),
                SQR_NUMBER          VARCHAR2(2000),
                SQR_MOQ             NUMBER,
                BPA_PO_LINE_ID      NUMBER,
                SUGG_BPA_NUMBER     VARCHAR2(30),
                BPA_BUY_PRICE_BASIS VARCHAR2(10),
                BPA_LINE_NUM        NUMBER,
                BPA_PO_LINE_LOC_ID  NUMBER,
                BPA_CURRENCY_CODE   VARCHAR2(10),
                BPA_PRICE           NUMBER,
                BPA_PO_HEADER_ID    NUMBER,
                BPA_EXPIRATION_DATE DATE,
                BPA_QUANTITY        NUMBER,
                ORIG_AVAILABLE_QTY  NUMBER,
    /*
    Constructor
    */
                constructor function XXSCP_AVL_CSP_SQR_O_TP return self as result
            );        
    
    create or replace
    TYPE body XXSCP_AVL_CSP_SQR_O_TP AS
    /*
    Constructor
    */
                constructor function XXSCP_AVL_CSP_SQR_O_TP return self as result
                is
                begin
                  return;
                end;
    end;        
    

    You can also assign your attributes that you construct your instance:

    l_tab_avl_csp_sqr.EXTEND(1);
    l_tab_avl_csp_sqr(l_tab_avl_csp_sqr.COUNT) := new XXSCP_AVL_CSP_SQR_O_TP(
      l_tab_planorders (i).l_num_plan_id,
      l_tab_planorders (i).l_num_sr_instance_id.
      l_tab_planorders (i).l_num_inventory_item_id,
      l_tab_planorders (i).l_num_base_item_id,
      l_tab_planorders (i).l_chr_item_name,
      l_tab_planorders (i).l_num_supplier_id,
      l_tab_planorders (i).l_num_supplier_site_id,
      l_rec_pegged_list (j).remaining_aval_qty,
      'Y',
      l_rec_pegged_list (j).sqr_line_id,
      l_rec_pegged_list (j).sqr_number,
      l_rec_pegged_list (j).sqr_moq,
      l_rec_pegged_list (j).bpa_po_line_id,
      l_rec_pegged_list (j).bpa_number,
      l_rec_pegged_list (j).bpb_type,
      l_rec_pegged_list (j).bpa_line_num,
      l_rec_pegged_list (j).bpa_lloc_id,
      l_rec_pegged_list (j).bpa_curr_code,
      l_rec_pegged_list (j).bpa_price,
      l_rec_pegged_list (j).bpa_expiration_date,
      l_rec_pegged_list (j).bpa_quantity,
      l_rec_pegged_list (j).remaining_aval_qty );
    

    Gerard

    Published by: gaverill on April 23, 2013 12:12

  • How the parameter of the procedure with the default table type?

    Hello!

    How the parameter of the procedure with the default table type?
    For example:
    type varchar2lType is table of varchar2(50) index by binary_integer;
    create or replace procedure test1
       (
        s1  varchar2(50)
        sa2 Varchar2Type
       )
    as
    begin
       dbms_output.put_line('yyxxyyy!');
    end;
    /
    Published by: bullbil on 16.01.2012 06:35

    If he should really be an associative array for some reason any (can't think why, but just for fun...) you could declare a dummy array in the packet header and specify as the default:

    create or replace package wr_test
    as
       type varchar2ltype is table of varchar2(50) index by pls_integer;
       g_dflt_varchar2l_tab varchar2ltype;
    
       procedure testit
          ( p_testarray varchar2ltype default g_dflt_varchar2l_tab );
    end wr_test;
    
    create or replace package body wr_test
    as
       procedure testit
          ( p_testarray varchar2ltype default g_dflt_varchar2l_tab )
       is
       begin
          dbms_output.put_line('p_testarray contains ' || p_testarray.count || ' elements');
       end testit;
    
    end wr_test;
    

    It is a bit of a hack, because it relies on a global variable that is exposed. A more orderly approach would overload the procedure so that a version does not have the table and another argument:

    create or replace package wr_test
    as
       type varchar2ltype is table of varchar2(50) index by pls_integer;
    
       procedure testit;
    
       procedure testit
          ( p_testarray varchar2ltype );
    
    end wr_test;
    
    create or replace package body wr_test
    as
    
       procedure testit
       is
          v_default_array varchar2ltype;
       begin
          testit(v_default_array);
       end testit;
    
       procedure testit
          ( p_testarray varchar2ltype )
       is
       begin
          dbms_output.put_line('p_testarray contains ' || p_testarray.count || ' elements');
       end testit;
    
    end wr_test;
    
  • How to create composite indexes for Table Type

    Hello

    I have a file type my_rec

    Type my_rec is RECORD)
    Field1 varchar2 (100),
    VARCHAR2 (100) Field2.
    field3 varchar2 (100));

    I declare a table type

    Type my_tt is table of my_rec INDEX OF VARCHAR (200);

    Here, instead of using varchar (200) can I said anyway that the values of Field1 and Field2 is a composite index?

    Thank you
    Paddy

    Still not able to solve my problem.

    No need to simplify.
    It's just not possible.

    1 index-by must be PLS_INTEGER, directory or VARCHAR2.
    2 anchor statements cannot be used (I know this isn't what you're doing here).
    3. you can not make a kind of self-reference on one of the fields in the index.

    An alternative is to make the big collect in a collection indexed by pls_integer, then go fill another collection with varchar2 key.

  • DIF creation Table Type Select = in gR 10, 3

    In a case of very simple example, I have a customers table that I am trying to create a Table Type select in the physical layer.

    Using the administration tool I created 'New physical tabe' and enter select * from customers where region = 'East '.

    If I "update all heads of rank" it shows now 56 lines - which is correct

    If I try 'view data' I get an error

    [nQSError: 17001] Oracle error code: 936, messgae: ORA-00936: lack of expression cal OCIStmtExecute beaked.
    [nQSError: 17010] Prepare the SQL statement failed.

    If I deploy the view I can go to sqlplus and choose in this one.

    I tried table of qualification name and select specific columns - I know that's not a problem of permission and without doubt the fact that there are ranks well confirms it must have generated correct SQL.

    I'm confused - what I'm missing here?

    Hi Tim,.

    You can try to give a few columns

    Select col_name, col_name2, col_name3 customer where region = 'east '.

    and to create all the columns--> right click on--> the new physical column (with the same data type)

    Thank you
    Saichand.v

  • created a plsql table type

    now I'm seeing its definition into a toad, but I am not able to see, although questioning the user_objects watch table type of desired table.

    query: select * from user_objects where object_name = 'DEF_NT_EMPLOYEES_DETAILS. '

    result:
    OBJECT_NAME | SUBOBJECT_NAME | OBJECT_ID. DATA_OBJECT_ID | OBJECT_TYPE | CREATED | LAST_DDL_TIME | TIMESTAMP | STATUS | TEMPORARY | GENERATED | SECONDARY
    DEF_NT_EMPLOYEES_DETAILS | 32975 | TYPE OF | 2010-12-31 19:17:25 | 2010-12-31 19:20:54 | 2010-12 - 31:19:20:54 | VALID | N | N | N |

    Oracle version: 9i

    Help, please.

    Concerning
    Rahul
    SELECT  TEXT
      FROM  USER_SOURCE
      WHERE TYPE LIKE 'TYPE%'
        AND NAME = 'DEF_NT_EMPLOYEES_DETAILS'
      ORDER BY TYPE,
               LINE
    /
    

    SY.

  • Error in the importation of tables with nested table types

    Hello

    I have two tables with the nested table type when I m try to import a schema to another all tables with error to give the type of identifying different

    Here is my order of import
    imp leader = tables_nested.dmp ignore = y fromuser = ABC touser = DEV_SCHEMA toid_novalidate = sup_payment_type
    I tried to import with the option TOID_NOVALIDATE, but it says
    IMP-00086: TOLD 'SUP_PAYMENT_TYPE' not found in the export file


    Here, the view of my log file.

    . . table import 'CONTRACT' 788 imported lines
    . . importation of "EQUIPMENT" 4301 imported table lines
    . . rows in table 'CONT_EQUIPMENT' import imported 4300
    IMP-00017: statement failed with error ORACLE 2304:
    "CREATE TYPE"SUP_PAYMENT_TYPE"TIMESTAMP" 2007-11 - 28:10:50:50' OID "3FF6F10."
    "CADC08A99E040A8C0010178F9"AS OBJECT ().
    "CONT_NO NUMBER".
    "EQP_NO NUMBER".
    "PMT_NO NUMBER".
    'DATE OF PLAN_PMT_DATE '.
    "S_NO NUMBER".
    "BATCH_NO NUMBER".
    'DATE OF TRAN_DT '.
    'DATE OF ACTUAL_PMT_DATE '.
    "ACTUAL_PAID_AMT_CURR NUMBER".
    "ACTUAL_PAID_AMT_KZT NUMBER".
    "PMT_CURSTYP_CD NUMBER".
    'NUMBER OF PMT_EXG_RATE);'
    IMP-00003: ORACLE error 2304
    ORA-02304: invalid literal object identifier
    IMP-00063: WARNING: jump table "DEV_SCHEMA". "" SUPPLIER_PAYMENT "as the type of the object
    'DEV_SCHEMA '. "' SUP_PAYMENT_TYPE ' could not be created or has identify different
    About to activate the constraints...

    Thank you

    Baptist

    Get the error on tahiti, I realized this must be a common problem and is described in Metaclunk.
    So in Metaclunk I get "ora-02304 imp' and came up with 1066139.6 ML.
    It describes your situation.
    So many times, it is very easy to solve your problems in a few minutes. I always wonder why people walk immediately into shock and horror and nothing to do when they hit a mistake.

    ----
    Sybrand Bakker
    Senior Oracle DBA

  • Pass values of table type (parameter)

    Hi all
    I've written a procedure that has table type among the input parameters. How to pass values from table type while calling the procedure. Please suggest


    Thank you and best regards,
    Mahesh


    -For reference

    -Registration type
    CREATE or REPLACE TYPE lt_rec_type IS (of the OBJECT
    Article VARCHAR2 (2000 BYTE)
    (, quantity NUMBER (10));

    -Table type
    CREATE or REPLACE TYPE lt_tbl_type IS TABLE OF THE lt_rec_type;

    -Procedure
    (PROCEDURE) xxxx
    p_table_type lt_tbl_type);
    SQL> CREATE OR REPLACE TYPE lt_rec_type IS OBJECT(item VARCHAR2(2000), quantity NUMBER(10))
      2  /
    
    Type created.
    
    SQL> CREATE OR REPLACE TYPE lt_tbl_type IS TABLE OF lt_rec_type
      2  /
    
    Type created.
    
    SQL> CREATE OR REPLACE PROCEDURE proc(p_table_type IN lt_tbl_type)
      2  AS
      3  BEGIN
      4     FOR i  IN 1..p_table_type.count
      5     LOOP
      6             dbms_output.put_line(p_table_type(i).item ||'/'|| p_table_type(i).quantity);
      7     END LOOP;
      8  END;
      9  /
    
    Procedure created.
    
    SQL> SET SERVEROUTPUT ON
    
    SQL> DECLARE
      2     l_tbl_type lt_tbl_type := lt_tbl_type();
      3  BEGIN
      4     l_tbl_type.extend;
      5
      6     l_tbl_type(1) := lt_rec_type('Car', 100);
      7
      8     l_tbl_type.extend;
      9
     10     l_tbl_type(2) := lt_rec_type('Bike', 450);
     11
     12     proc(l_tbl_type);
     13  END;
     14  /
    Car/100
    Bike/450
    
    PL/SQL procedure successfully completed.
    
    SQL>
    
  • HELPS OPERATOR ON TABLE TYPE LESS

    Hi all

    I'm using Oracle Database 11 g.

    I want to perform a negative operation on a varray.

    In the code, I want to update based on the result of the operation LESS below. I tried, but it gives 06550 ORA. I think what I'm not looking for the right way to use the collection.

    Help, please

    declare

    TYPE array_tbl IS TABLE OF varchar (255);

    v_array array_tbl;

    Start;

    Select to bulk model_name fired into v_array from kit_car_dim where owner = 'KIT' and model_name like 'FORD ';

    because me in 1... loop v_array. Count;

    / * I want to do something like this * /.

    Select model_name in v_array

    less

    Select model_name from kit_car_dim where owner = 'KIT ';

    / * which can be used for the update statement below * /.

    Update kit_car_dim set modified_timestamp = sysdate, model_ident = '1'

    where model_name = (model_name of operation less);

    end loop;

    end;

    First, you declare a nested table, varray No. If you don't use a nested table, use MULTISET EXCEPT:

    Set serveroutput on

    declare

    TYPE array_tbl IS TABLE OF varchar (255);

    v_array array_tbl;

    Start

    Select dname

    Bulk collect

    in v_array

    of the Department;

    for v_i loop 1.v_array.count

    dbms_output.put_line (v_array (v_i));

    end loop;

    dbms_output.put_line('===');

    v_array: = multiset v_array except array_tbl ('ACCOUNTING');

    for v_i loop 1.v_array.count

    dbms_output.put_line (v_array (v_i));

    end loop;

    end;

    /

    ACCOUNTING
    SEARCH
    SALES
    OPERATIONS
    ========================
    SEARCH
    SALES
    OPERATIONS

    PL/SQL procedure successfully completed.

    SQL >

    SY.

  • Add an attribute of the element configuration table type programmatically.  How can I specify the type of table?

    I am trying to add a configuration item that is an array of strings.  I don't know how to do this programmatically and have it show as an array of strings.  I would like people to be able to use the client of vCO and only change these if needed is.  I managed to add items, but they appear as "modified".  I can retrieve all ok by programming, but I guess since one can table actually waiting variant values is done deal as the generic object rather than an array of strings.  Is it possible to force this type when I put the value via the api?  It's my test code:

    var testArray = new Array();
    testArray.push ("string1");
    testArray.push ("string2");
    element.setAttributeWithKey ("TestKey", testArray);
    This translates into an attribute of type table, but I like it to be of type Array/string;

    Paul, as far as I know, you must manually set your attribute types using the vCO client. You cannot specify the types using script.

  • Performance issue Bulk Insert PL/SQL table type

    Hi all

    I put in work of a batch to fill a table with a large number of data records(>3,000,000). To reduce the execution time, I used PL/SQL tables to temporarily store data that must be written to the destination table. Once all documents are piling up in the PL/SQL table I use a FORALL operator for bulk insert the records in the physical table.

    Currently, I follow two approaches to implement the process described above. (Please see the code segments below). I need to choose how to best wise performance between these two approaches. I really appreciate all the comments of experts about the runtime of the two approaches.

    (I don't see much difference in consumption of time in my test environment that has limited the data series. This process involves building a complex set of structures of large product once deployed in the production environment).


    Approach I:_
    DECLARE
    TYPE of test_type IS test_tab % ROWTYPE directory INDEX TABLE;
    test_type_ test_type.
    ins_idx_ NUMBER;
    BEGIN
    ins_idx_: = 1;
    NESTED LOOPS
    test_type_ (ins_idx_) .column1: = value1;
    test_type_ (ins_idx_) .column2: = value2;
    test_type_ (ins_idx_) .column3: = value3;
    ins_idx_: = ins_idx_ + 1;
    END LOOP;

    I_ FORALL in 1.test_type_. COUNTY
    INSERT INTO test_tab VALUES (i_) test_type_;
    END;
    /


    Approach II:_
    DECLARE
    Column1 IS a TABLE OF TYPE test_tab.column1%TYPE INDEX DIRECTORY.
    Column2 IS a TABLE OF TYPE test_tab.column2%TYPE INDEX DIRECTORY.
    Column3 IS a TABLE OF TYPE test_tab.column3%TYPE INDEX DIRECTORY.
    column1 column1_;
    column2_ Column2;
    column3_ Column3;
    ins_idx_ NUMBER;
    BEGIN
    ins_idx_: = 1;
    NESTED LOOPS
    column1_ (ins_idx_): = value1;
    column2_ (ins_idx_): = value2;
    column3_ (ins_idx_): = value3;
    ins_idx_: = ins_idx_ + 1;
    END LOOP;

    FORALL idx_ in 1.column1_. COUNTY
    INSERT
    IN n_part_cost_bucket_tab)
    Column1,
    Column2,
    Column3)
    VALUES)
    column1_ (idx_),
    column2_ (idx_),
    column3_ (idx_));
    END;
    /

    Best regards
    Lorenzo

    Published by: nipuna86 on January 3, 2013 22:23

    nipuna86 wrote:

    I put in work of a batch to fill a table with a large number of data records(>3,000,000). To reduce the execution time, I used PL/SQL tables to temporarily store data that must be written to the destination table. Once all documents are piling up in the PL/SQL table I use a FORALL operator for bulk insert the records in the physical table.

    Performance is more than just reducing the execution time.

    Just as smashing a car stops more than a car in the fastest possible time.

    If it was (breaking a car stopping all simply), then a brick with reinforced concrete wall construction, would have been the perfect way to stop all types of all sorts of speed motor vehicles.

    Only problem (well more than one actually) is that stop a vehicle in this way is bad for the car, the engine, the driver, passengers and any other content inside.

    And pushing 3 million records in a PL/SQL 'table' (btw, that is a WRONG terminology - there no PL/SQL table structure) in order to run a SQL cursor INSERT 3 million times, to reduce the execution times, is no different than using a brick wall to stop a car.

    Both approaches are pretty well imperfect. Both places an unreasonable demand on the memory of the PGA. Both are still row-by-row (aka slow-by-slow) treatment.

  • I am trying to create a function that would be on the table type returns.

    Gurus,

    I am trying to create a function that returns a table nested with 3
    columns in a table as a guy.

    my query is like

    Select col1, col2, col3 from table_1;

    I am a bit newbie in Oracle and have never used collections.
    Can you please guide?

    >
    I am a bit newbie in Oracle and have never used collections.
    >
    Then you should start with the documentation
    http://docs.Oracle.com/CD/B28359_01/AppDev.111/b28370/TOC.htm

    Chapter 5 is all about collections using PL/SQL and examples
    >
    I am trying to create a function that returns a table nested with 3
    columns in a table as a guy.
    >
    This isn't enough of a description to know what you're trying to do, or how you plan to use the service. The query you provided is completely irrelevant to the question you are asking.

    You ask about functions in pipeline? Here is an example of this

    -- type to match emp record
    create or replace type emp_scalar_type as object
      (EMPNO NUMBER(4) ,
       ENAME VARCHAR2(10),
       JOB VARCHAR2(9),
       MGR NUMBER(4),
       HIREDATE DATE,
       SAL NUMBER(7, 2),
       COMM NUMBER(7, 2),
       DEPTNO NUMBER(2)
      )
      /
    
    -- table of emp records
    create or replace type emp_table_type as table of emp_scalar_type
      /
    
    -- pipelined function 
    
    create or replace function get_emp( p_deptno in number )
      return emp_table_type
      PIPELINED
      as
       TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
        emp_cv EmpCurTyp;
        l_rec  emp%rowtype;
      begin
        open emp_cv for select * from emp where deptno = p_deptno;
        loop
          fetch emp_cv into l_rec;
          exit when (emp_cv%notfound);
          pipe row( emp_scalar_type( l_rec.empno, LOWER(l_rec.ename),
              l_rec.job, l_rec.mgr, l_rec.hiredate, l_rec.sal, l_rec.comm, l_rec.deptno ) );
        end loop;
        return;
      end;
      /
    
    select * from table(get_emp(20))
    

Maybe you are looking for