Difference between an associative array, table etc.?

Hello

I wonder what are the differences in comparison with these? They seem similar, but a table need a custom c# and the associative array type class does not. When should you use that? Say I want to pass a collection of numbers to a perhaps stored procedure?

You want to test something to appropriate for what your use to gauge that.

I just did a quick test and associative is quite a bit faster than the UDT for my test regarding the disappearance of the object and the invocation of the proc (I went from size 1000 channels 2000), but I've also used an empty body of the stored procedure and the proc in fact might affect things.

Here is my code if you want to test. I used ODT to generate the V2TYP class and then changed string [] m_V2TYP; to the public within this category just for ease of use.

It will be useful,
Greg

/*
create type v2typ is table of varchar2(4000);
 /
create or replace package testpack as
TYPE v2array is table of varchar2(4000) index by BINARY_INTEGER;
PROCEDURE test_assoc_array(v2arr1 IN v2array);
procedure test_udt(v2udt in v2typ);
END;
/
CREATE or replace PACKAGE BODY testpack AS
PROCEDURE test_assoc_array(v2arr1 IN v2array) IS begin null; END;
procedure test_udt(v2udt in v2typ) is begin null; end;
END;
/
*/

using System;
using System.Data;
using Oracle.DataAccess.Client;
namespace compare_assocarray_and_udt
{
    class Program
    {
        static string constr = "data source=orcl;user id=scott;password=tiger;";
        static void Main(string[] args)
        {
            int numelements = 1000;
            string[] vals = new string[numelements];
            for (int i = 0; i < numelements; i++)
                vals[i] = new string('a', 2000);

            V2TYP myv2typ = new V2TYP();
            myv2typ.m_V2TYP = vals;

            test_assoc_array(vals);
            test_udt(myv2typ);
        }

        static void test_assoc_array(string[] vals)
        {
            using (OracleConnection con = new OracleConnection(constr))
            {
                con.Open();

                using (OracleCommand cmd = new OracleCommand("testpack.test_assoc_array", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    OracleParameter Param1 = cmd.Parameters.Add("param1", OracleDbType.Varchar2);
                    Param1.Direction = ParameterDirection.Input;
                    Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
                    Param1.Size = vals.Length;
                    Param1.Value = vals;
                    DateTime start = System.DateTime.Now;
                    cmd.ExecuteNonQuery();
                    Console.WriteLine("assoc array elapsed: {0}ms", (System.DateTime.Now - start).TotalMilliseconds.ToString());
                }
            }
        }

        static void test_udt(V2TYP val)
        {
            using (OracleConnection con = new OracleConnection(constr))
            {
                con.Open();

                using (OracleCommand cmd = new OracleCommand("testpack.test_udt", con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    OracleParameter Param1 = cmd.Parameters.Add("param1", OracleDbType.Object);
                    Param1.Direction = ParameterDirection.Input;
                    Param1.UdtTypeName = "SCOTT.V2TYP";
                    Param1.Value = val;
                    DateTime start = System.DateTime.Now;
                    cmd.ExecuteNonQuery();
                    Console.WriteLine("udt elapsed:         {0}ms", (System.DateTime.Now - start).TotalMilliseconds.ToString());
                }
            }

        }
    }
}

Tags: Database

Similar Questions

  • Difference between an associative array and Nested table

    Hello

    Can you please tell me, what is the main differences between associative array and Nested table. I'm not sure, in this case we are to use.

    Thank you and best regards,
    Sanjeev.

    user13483989 wrote:
    Hello

    Can you please tell me, what is the main differences between associative array and Nested table. I'm not sure, in this case we are to use.

    Did you happen to read the documentation, explain its good enough!
    http://docs.Oracle.com/CD/E11882_01/AppDev.112/e25519/composites.htm#LNPLS005

    Aman...

  • What is the difference between the type of table and view?

    Hello world.

    What is the difference between the type of view and table that we can set using SQL statement such as: "tab type is table of...» » ?

    A view is a stored query.

    An array type is a construction of PL/SQL.

    Both are documented:

    http://docs.Oracle.com/CD/E11882_01/server.112/e10897/schema.htm#ADMQS0841

    Management of schema objects

  • code succcessive to genereate difference between dates in a table

    First create and insert statements;
    create table schedule(iloan_code number , schedule_date date);
    
    insert into schedule values(1001, to_date('01-jun-2012'));
    insert into schedule values(1001, to_date('01-jul-2012'));
    insert into schedule values(1001, to_date('01-aug-2012'));
    insert into schedule values(1001, to_date('01-sep-2012'));
    insert into schedule values(1001, to_date('01-oct-2012'));
    commit;
    The output of the table of the ANNEX should be now like this:
    ILOAN_CODE     SCHEDULE_DATE
    1001              01-JUN-12
    1001              01-JUL-12
    1001              01-AUG-12
    1001              01-SEP-12
    1001              01-OCT-12
    We want an additional column by name as well as the existing columns DAYS that would be the difference between dates.

    First line should be the difference between sysdate as well as the date of June 1, 2012 and successive lines must be the difference between successive calendar date

    For example in the second row the DAYS column should represent the difference between 1 July 2012 and 1 June 2012 and so on for the following ranks too.

    We need get the result by a SELECT statement

    The output of the table in the ANNEX must be something like that.
    iloan_code      schedule_date     days     Logic which we need 
    1001     1-Jun-12     22     sysdate-1st June 2012
    1001     1-Jul-12     30     difference between 1st July 2012 and 1st June 2012
    1001     1-Aug-12     31     difference between 1st aug 2012  and 1st July 2012
    1001     1-Sep-12     31     difference between 1st sep  2012 and 1st aug  2012
    1001     1-Oct-12     30     difference between 1st oct 2012 and 1st sep 2012
    Please notify;

    Hello

    You can change the Hoek solution like this:

    SELECT    iloan_code
    ,             schedule_date
    ,             schedule_date - LAG ( schedule_date
                                , 1
                         , TRUNC (SYSDATE)
                         ) OVER (ORDER BY schedule_date)     AS days_between
    FROM      schedule
    ORDER BY  schedule_date
    ;
    

    If all schedule_dates will be after SYSDATE, then you need not the CASE expression to test if it is.
    The argument optional 3rd to LAG is a return value in case there is no previous line.

    Sri says:
    ... The output of the table in the ANNEX must be something like that.

    iloan_code      schedule_date     days     Logic which we need
    1001     30-Jun-12     07     sysdate-30June 2012
    1001     1-Jul-12     30     difference between 1st July 2012 and 30 June 2012 ...
    

    The difference between 30 June 2012 and July 1, 2012 is not only 1 day?

  • difference between materailized and a table

    Hey hiii

    I want to know what is a difference between a materialized view and that is to say a table suppose I create a table and another table B on the table, I created a trigger that will download all changes made to A, it IE insert, update or delete while it will perform all actions that a materialized view can perform on one or is there a difference between them



    Thks

    In this case, MView will be much more robust and reliable, because it is designed for that you use coding the trigger. You will manage all possible exceptions and lock the trigger claim everything is Oracle build-in MView. And also, MView can be much more powerful.

    Nicolas.

  • APEX migration associated with tables, etc. to a new database

    I'm trying to migrate from the APEX linked tables, (for example, users, etc.) but it doesn't look like an easy thing.

    I can easily use the Data Pump to move any existing scheme, but when I do that the schema of the APEX, every thing will be mixed and won't.

    What is really the best way to get the schema of the APEX, has anyone done this?

    Mehr

    Export workspace (from pages of the Admin of the APEX) allows you to export your workspace including all users.

    Export demand (from the APEX application Builder) allows you to export your applications - metadata of the APEX.

    DataPump allows you to export your data schemas.

    Simple and fast - I just did the same thing tonight to move applications from one server to another.

  • difference between link and association

    What is the difference between the association and the display link?

    How dose see links work?

    Hey Danny,

    Links has an explanation on the view links and associations:
    Links: http://download-uk.oracle.com/otn_hosted_doc/jdeveloper/1012/bc4j/intro/bc_avl.html
    Associations: http://download-uk.oracle.com/otn_hosted_doc/jdeveloper/1012/bc4j/intro/bc_aassoc.html

    In short, show links concerns two objects view and associations of two entity objects. There is no link between the two, but links can be created based on associations or independently without associations.

    Jean Lou

    Published by: Marc Israel on November 19, 2009 01:26

  • What is the difference between associative arrays and nested tables?

    Hello
    What is the difference between associative arrays and nested tables?

    nested tables cannot be indexed by other than pls_integer and unlike nested tables table associative cananot be declared at the schema level.

    is there any other difference set apart from the diff above 2?

    user13710379 wrote:
    What is the difference between associative arrays and nested tables?

    Name-value pairs (associative) against a list of values (table standard/nested table).

    nested tables cannot be indexed by other than pls_integer

    They are not "indexed" the way in which an associative array is indexed. A standard table is referenced by the position of the cell in the table. This position is essentially the offset of the memory of the cell from the start address of the table.

    Can not solve a cell in an associative array directly via a memory offset index. You place a cell reference value it by his 'name' (a search in the linked list/hash table).

    The following example shows the difference between the pairs of name / value and a list of core values.

    SQL> declare
      2          --// associative arrays are NAME-VALUE pairs
      3          type TArr1 is table of varchar2(10) index by pls_integer;
      4          type TArr2 is table of varchar2(10) index by varchar2(10);
      5
      6          arr1    TArr1;
      7          arr2    TArr2;
      8  begin
      9          arr1(100) := '1st entry';
     10          arr1(1) := '2nd entry';
     11          arr1(5) := '3rd entry';
     12
     13          arr2('john') := 'New York';
     14          arr2('jane') := 'Paris';
     15          arr2('jack') := 'London';
     16
     17  end;
     18  /
    
    PL/SQL procedure successfully completed.
    
    SQL>
    SQL>
    SQL> declare
      2          --// standard arrays are lists
      3          type TArr3 is table of varchar2(10);
      4          type TArr4 is table of number;
      5
      6          arr3    TArr3;
      7          arr4    TArr4;
      8  begin
      9          arr3 := new TArr3( '1st entry', '2nd entry', '3rd entry' );
     10
     11          arr4 := new TArr4( 100, 1, 5 );
     12  end;
     13  /
    
    PL/SQL procedure successfully completed.
    
    SQL> 
    
  • Difference between the nested table and an associative array

    Hello
    While going through the link http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/05_colls.htm
    I came across the statement that
    Nested tables can be stored in a column of data, but of associative arrays

    So I tried the following statement for the associative arrays where he works
    create type t_nm is table of number index by binary_integer
    The t_nm of type above name is stored in USER_TYPES.


    So how can we say that associative arrays can not be stored in DB.

    Please correct me if I'm wrong.

    Thank you

    Published by: smile on April 8, 2011 02:42
    SQL> drop type t_num;
    
    Type dropped.
    
    SQL> create type t_num table of number index by binary_integer;
      2  /
    
    Warning: Type created with compilation errors.
    
    SQL> desc t_num;
    ERROR:
    ORA-24372: invalid object for describe
    
    SQL> set lines 999
    SQL> select * from user_types;
    
    TYPE_NAME                      TYPE_OID                         TYPECODE                       ATTRIBUTES
    ------------------------------ -------------------------------- ------------------------------ ----------
    T_NUM                          57417E92AD25409CB858D339570A0F56 OBJECT                                  0 
    
    SQL> select object_name, object_type, status from user_objects where object_name = 'T_NUM';
    
    OBJECT_NAME                                                                                                                      OBJECT_TYPE         STATUS
    -------------------------------------------------------------------------------------------------------------------------------- ------------------- -------
    T_NUM                                                                                                                            TYPE                INVALID
    
    SQL> 
    

    You might have missed the error into a TOAD.

    Concerning

    REDA

  • What is the preferred means of data transmission as a type of record between the nested table of pl/sql program or an associative array

    What is the preferred means of data transmission in the associative array of the nested table record vs

    Choose between Nested Tables and associative arrays

    The two nested tables and associative arrays (formerly index - by tables) use similar index notation, but they have different characteristics when it comes to persistence and ease of passing parameters.

    Nested tables can be stored in a column of data, but can of associative arrays. Nested tables can simplify the SQL operations where you would normally join a single-column table with a larger table.

    Associative arrays are appropriate for relatively small lookup tables where the collection can be constructed in memory whenever a procedure is called or a package is initialized. They are good for the collection of the information volume is unknown beforehand, because there is no fixed limit on their size. Their index values are more flexible, as associative array indices can be negative, can be no sequential and can use values of string instead of numbers.

    PL/SQL automatically converts between the bays of the host and the associative arrays that use values of digital keys. The most effective way to move the collections to and from the database server is to implement data values in associative arrays, and then use these associative arrays with erections in bulk (the FORALL statement or BULK COLLECT clause).

    With the help of documents and Collections of PL/SQL

    Read this:

    How to pass the record set as a parameter of the procedure.

    https://community.Oracle.com/thread/2375173?TSTART=0

  • What is the difference between a table and a subform?

    What is the difference between a table and a subform in LC forms? Please post your answers about the merits and demerits of using subforms instead of tables.

    Hello

    a table is simply a set of subforms with a particular role.

    It is easier to handle the tables if they must be dynamic (add or remove lines, show or hide lines when page breaks appear etc..).

    And Designers UI has some dialogue prepared in the object palette to simplify the settings of the tables.

    For subforms, dialog boxes are more frequent, so you have yourself a little more script.

    But at least you can do everything with subforms as you can do with tables.

    The only one who is not very good with tables we work when you wrap arrays in other tables.

  • join an associative array with table

    I'm new to associative arrays.

    Here, I'm doing the equivalent of as follows:
     create table mytable as select n1,padding from T1 where rownum <=5;
    Table created.
    And join this table with T1 and the corresponding records to get top 10
      1   SELECT * FROM
      2   (
      3     SELECT
      4              T1.n1
      5            , T1.small_vc
      6            , mytable.padding
      7      FROM
      8             mytable
      9            , T1
     10      WHERE
     11            mytable.n1 = T1.n1
     12   )
     13* WHERE ROWNUM <= 10;
    Now with the assicative bays
      1  DECLARE
      2          type array is table of T1%rowtype index by binary_integer;
      3          l_data array;
      4          l_rec T1%rowtype;
      5  BEGIN
      6          SELECT
      7                    *
      8          BULK COLLECT INTO
      9          l_data
     10          FROM T1
     11          WHERE ROWNUM <=5;   -- the top 5 records
     12          FOR i IN 1..l_data.count
     13          LOOP
     14                BEGIN
     15  --
     16               SELECT
     17                     *
     18               INTO
     19                     l_rec
     20               FROM
     21                     T1
     22               WHERE
     23                     T1.n1 = l_data(i).n1;
     24             EXCEPTION
     25               WHEN OTHERS THEN
     26                       DBMS_OUTPUT.PUT_LINE(to_char(SQLCODE) || ' - ' || substr(SQLERRM,1,200));
     27        END;
     28     END LOOP;
     29* END;
    [email protected]> /
    -1422 - ORA-01422: exact fetch returns more than requested number of rows
    -1422 - ORA-01422: exact fetch returns more than requested number of rows
    -1422 - ORA-01422: exact fetch returns more than requested number of rows
    -1422 - ORA-01422: exact fetch returns more than requested number of rows
    -1422 - ORA-01422: exact fetch returns more than requested number of rows
    Of course the encoding isn't fair. Also, I want to display the first 10 results set.

    Thank you

    Mich

    Talebzadeh mich wrote:

    Does it fast enough and I think it is necessary for using the pipeline to multiple joins functions to update the tables of FACTS so to speak.

    A pipeline returns data that are not indexed. So by default, using data from a pipeline function involves a full production table scan. That's why native SQL tables are better than a pipeline - as these are accessible and used optimally (via the index partitions, bitmaps, clusters, etc.).

    Since PTFS uses memory structures as associative arrays do, what are the main benefits of using TFP compared to the associative arrays in addition to the fact that in MFP memory structures are presented in the SQL format?

    Not the same structure. An associative array is typically a list linked and "indexed" differently.

    A normal array is accessible by compensation. Let's say it's an array of bytes 4 IEEE floats. 1st entry is at position 0 in the structure of memory. The 2nd entry at position 4. Etc.

    Index number of the table is used to determine the offset of this table cell in the structure of memory.

    An associative array is "indexed" using strings or dates or numbers (not sequential). Thus a structure like a linked list must be used. Access to the range means a search in this linked to the match index list and then read the value of this cell in the table.

    The associative arrays do exist in the SQL engine. It is a unique data structure of PL/SQL engine.

    As to the benefits of a pipeline - this is when the data must be processed and plain vanilla SQL is not able to do this and PL/SQL is required.

    Simple example. A flat web service XML data structure. A table of pipeline can use UTL_HTTP to make the service web call, retrieve the XML code and that the output data as rows and columns - in effect turning a web service interface into something that looks like a SQL table and can be used as if it were a table SQL.

    Reading Tom on the use of pipelines comments:
    http://asktom.Oracle.com/pls/asktom/f?p=100:11:2814739467100916:P11_QUESTION_ID:19481671347143

    Also when can I use associative arrays functions insteard table in pipeline?

    Associative arrays are useful for the only PL/SQL data. For example, which deals with the pair name / value that are placed by a customer and that are used to determine which query or process data. For the majority of the PL/SQL code and the treatment, associative arrays are not necessary. And often wrongly used that developers do not seem to understand what an associative array is and how it differs from a normal table structure.

  • table behavior difference between php and flex?

    I think that this problem is probably caused by a difference in behavior of the table between php and flex I am not quite striking.  It's the flex code that I wrote and the php code is shown below.  I'm new to flex and this really left me speechless.    Thanks a lot for your help.

    The entries are father = [SB1, kit] dam [kit, kit] = sireLinkedP = E (P) and [e F]

    Output should be (and is with PHP) random = [E, P, SB1], [E, P, kit], [e, P, SB1], [e kit, P],

    What I get is random = [E, P, SB1, kit], [E, P, SB1, kit], [e, P, SB1, kit], [e, P, SB1, kit]

    function randomlinks(sire:Array,dam:Array,sireLinkedP:Array):Array {}

    var str:String [0] sire = .toUpperCase ();

    var str1:String sire [1] = .toUpperCase ();

    var str2:String dam [0] = .toUpperCase ();

    var str3:String dam [1] = .toUpperCase ();

    var x: uint = sireLinkedP.length;

    var k: uint = 0;

    var random: Array = new Array();

    x--;

    trace ("randomlinks sirelinked:" + sireLinkedP);

    for (var i: uint = 0; i < = x; i ++) {}

    for (var j: uint = 0; j < = 1; j ++) {}

    random [k] = sireLinkedP [i];

    trace ("random" + k + ":" + random [k]);

    If (str == [0] sire | str1 == sire [1] | str2 == dam [0] | str3 == dam [1]) {}

    random [k] .push (sire [j]);

         }//end if

    trace ("random" + k + ":" + random [k]);

         k++;

    } //end for loop

    } //end for loop

    trace ("randomlinks:" + random);

    return (random);

    { } //end randomlinks function

    function randomlinks ($sire, $dam, $sirelinked) {}

    $x = count ($sirelinked);

    $x--;

    $k = 0;

    for ($i = 0; $i < = $x; $i ++) {}

    for ($j = 0; $j < = 1; $j ++) {}

    $random [$k] = $sirelinked [$i];

    if (ctype_upper($sire[0]) | ctype_upper($sire[1]) | ctype_upper($dam[0]) | ctype_upper($dam[1])) {}

    array_push($random[$k],$sire[$j]) ;}

    $k++;

    }

    }

    Return ($Random);

    }

    You are right to make a copy. In Flex, the tables are references, if this assignment: random [k] = sireLinkedP [i] affects [k] random real behind sireLinkedP [i] matrix instead of a copy. Who is?

    -Kevin

  • difference between tables and advanced

    Hello

    What is the difference between tables main and advanced?

    What are the uses of the two beans?

    Hello

    OAAdvancedTableBean extends OATableBean to support existing features to the table that previously required a control by declarative programming.
    OAAdvancedTableBean also supports declarative features not available with OATableBean, such as the scope of column in a table column header. Oracle recommends new tables be implemented as 'Advanced... ' arrays

    Please read more information of Jdev Guide...

    Thank you
    AJ

  • Difference between two rows in a table.

    Hi all

    I have a requirement where I need to calculate the difference of a column, but the values are in two rows.

    Its exactly like that, I'll have a table where I have stored incidents with their status and their modification dates

    example:
    Incident_Id: Status: Modified_Date (in seconds from a specific date)
    1: 1: 9080890
    1: 2: 9080999
    1: 3: 9081900
    2: 1: 10000900
    2: 2: 10001000
    2: 3: 10002000

    Now there I show the time spent by each incident in each State.

    That is to say for the State 1 I need the difference between the date of change of condition 2 and updated the date of status 1 Similarly

    2 necessary status the difference between the date of change of condition 3 and updated the status date 2 and so on.

    the real result, I need is like that

    Incident_Id: Status: Timespent
    1: 1: (modified_date (status2) - modified_date (status1))


    Please help me to write the query to do this.

    Kind regards
    Tauceef

    Can we assume that the lines are classified according TO the event status ?
    This (i.e. an Ordering) is necessary in order to systematically identify consecutive lines.

    Please try the analytical function LAG and less to the current value.

Maybe you are looking for