Associative Array Assignment

I have an associative array that is built on a record.
TYPE LKey IS RECORD (
lock_key locks.lock_key%TYPE,
category_id_cd locks.category_id_cd%TYPE);
TYPE LockKeys_t IS TABLE OF LKey
INDEX BY PLS_INTEGER;
v_LockKeys_arr LockKeys_t;
How do I populate the elements of this array one row at a time within my cursor FOR loop? I just want to do something like this:
SELECT v_lock_key, v_category_id_cd INTO v_LockKeys_arr FROM dual;
When I try this I get : "expression v_LockKeys_arr in the INTO list is of wrong type."
Then I will loop through the array and use each element one at a time:
FOR j IN 1..v_LockKeys_arr.COUNT
LOOP
ReleaseLocks( v_LockKeys_arr(j).lock_key||'2:',
v_Lockkeys_arr(j).category_id_cd,
i_User, v_release_set );
END LOOP;
Thank you in advance for your time.

DECLARE--CREATE RECORD
TYPE CUSTOMER_RECORD IS RECORD (CUSTOMER_ACCT_ID NUMBER,
CUSTOMER_NAME VARCHAR2(2000));
--CREATE TABLE OF RECORD TYPE
TYPE CUSTOMER_REC IS TABLE OF
CUSTOMER_RECORD
INDEX BY BINARY_INTEGER;
--INSTANCE OF RECORD
LREC_CUSTOMER_RECORD CUSTOMER_RECORD;
--INSTANCE OF TABLE
LT_CUSTOMER_REC CUSTOMER_REC;
BEGIN
--ASSIGN VALUES TO INSTANCE OF RECORD
LREC_CUSTOMER_RECORD.CUSTOMER_ACCT_ID:=10;
LREC_CUSTOMER_RECORD.CUSTOMER_NAME:='BHAGAT';
--INSERT INTO TABLE, VALUES FROM RECORD INSTANCE
LT_CUSTOMER_REC(1):=LREC_CUSTOMER_RECORD;
--OUTPUT
DBMS_OUTPUT.PUT_LINE(LT_CUSTOMER_REC(1).CUSTOMER_ACCT_ID);
DBMS_OUTPUT.PUT_LINE(LT_CUSTOMER_REC(1).CUSTOMER_NAME);
END;
/

Similar Messages

  • Error while assigning dates to associative array of date type

    Hi All,
    I am facing the issue while assigning dates to associative array of date type:
    Oracle Version:
    SQL> select * from v$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for Linux: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
    Stored procedure i am trying to write is as following
    create or replace procedure jp1 (
    p_start_date date default trunc(sysdate,'MM')
    , p_end_date date default trunc(sysdate)
    is
    l_no_of_days number;
    type t_date_id is table of date
    index by pls_integer;
    l_date_id_arr t_date_id;
    begin
    l_no_of_days := p_end_date - p_start_date;
    for i in 0
    .. l_no_of_days - 1
    loop
        l_date_id_arr := p_start_date + i;
        dbms_output.put_line(p_start_date + i);
    end loop;
    end;
    I am getting error at line 14 while compiling this. and the error message is as following:
    Errors for PROCEDURE JP1:
    LINE/COL ERROR
    14/5     PL/SQL: Statement ignored
    14/22    PLS-00382: expression is of wrong type
    So while investigating this i tried to output the value of (p_start_date + i) using dbms_output.put_line and the output is date itself.
    create or replace procedure jp1 (
    p_start_date date default trunc(sysdate,'MM')
    , p_end_date date default trunc(sysdate)
    is
    l_no_of_days number;
    type t_date_id is table of date
    index by pls_integer;
    l_date_id_arr t_date_id;
    begin
    l_no_of_days := p_end_date - p_start_date;
    for i in 0 .. l_no_of_days-1
    loop
        --l_date_id_arr := p_start_date + i;
        dbms_output.put_line(p_start_date + i);
    end loop;
    end;
    output of the
    exec jp1
    is as following:
    01-DEC-13
    02-DEC-13
    03-DEC-13
    04-DEC-13
    05-DEC-13
    06-DEC-13
    07-DEC-13
    08-DEC-13
    09-DEC-13
    10-DEC-13
    11-DEC-13
    12-DEC-13
    13-DEC-13
    14-DEC-13
    15-DEC-13
    16-DEC-13
    17-DEC-13
    18-DEC-13
    I see the output as date itself. so why it is throwing error while assigning the same to associative array of date type.
    I tried to google also for the same but to no avail.
    Any help in this regard is appreciated or any pointer some other thread on internet or in this forum.
    Thanks in advance
    Jagdeep Sangwan

    Read about associative arrays :
    create or replace procedure jp1 (
    p_start_date date default trunc(sysdate,'MM')
    , p_end_date date default trunc(sysdate)
    ) is
    l_no_of_days number;
    type t_date_id is table of date
    index by pls_integer;
    l_date_id_arr t_date_id;
    begin
    l_no_of_days := p_end_date - p_start_date;
    for i in 0..l_no_of_days - 1
    loop
        l_date_id_arr(i) := p_start_date + i;
        dbms_output.put_line(p_start_date + i);
    end loop;
    end;
    Ramin Hashimzade

  • Associative Array (Object) problems

    Here is the function i'm dealing with
    i'm reading in a delimited string and using indexed arrays to
    break them up and assign the keys and values to an associative
    array in a loop.
    i'm using variables in the loop and the array loads as
    expected in the loop
    but outside the loop, the only key is the variable name and
    the value is undefined
    this is true using dot or array notation, as well as literal
    strings for the keys
    any help is appreciated
    watchSuspendData = function (id, oldval, newval):String {
    //the incoming suspendData string is delimited by the
    semicolon;
    //newval is: firstValue=Yes;captivateKey=1
    var listSuspendData:Array = newval.split(";"); // convert it
    to a list of key/value pairs
    if (listSuspendData.length > 0){
    //line 123: listSuspendData.length is: 2
    for (i=0; i < listSuspendData.length; i++){ //for each
    key/value pair
    var keyValArray:Array = new Array();
    var myNameValue:String = listSuspendData
    //line 127: listSuspendData is: firstValue=Yes
    keyValArray = myNameValue.split("="); // split 'em on the
    equal sign
    var myKey:String = keyValArray[0];
    var myVal:String = keyValArray[1];
    //keyValArray[0] is: firstValue
    //keyValArray[1] is: Yes
    // store the key and the value in associative array
    suspendDataArray.myKey = myVal;
    trace("line 134: suspendDataArray is: " +
    suspendDataArray.myKey);
    // trace is line 134: suspendDataArray is: Yes on the first
    pass and 1 on the second
    //the below loop always returns one array key: myKey and the
    value as undefined
    for(x in suspendDataArray){
    trace("x is: " + x); //x is: myKey
    trace("the val is: " + suspendDataArray.x); //the val is:
    undefined
    } //end for
    return newval;

    on lines 12-13 i assign the key=value pair to string
    variables
    then on lines 17-18 i assign those values to the associative
    array using dot notation
    the trace seems to work there
    the problem is that when the procedure exits the for loop,
    the associative array only has one key (myKey) and no value
    (undefined)
    all the documentation i've read shows using these types of
    arrays with either non-quoted property names like:
    myAssocArray.myKey = "somevalue";
    or
    myAssocArray[myKey] = "somevalue";
    i tried assigning the key/value pairs directly from the
    indexed arrays, but the result was always undefined
    like this:
    suspendDataArray.keyValArray[0] = keyValArray[1]
    or
    suspendDataArray[keyValArray[0]] = keyValArray[1]
    i even tried building a string in the loop and trying to
    assign all the pairs at once using the curly brace
    this is pretty wierd behavior for actionscript or i'm missing
    something basic here
    thanks for looking

  • Associative Array vs Table Scan

    Still new to PL/SQL, but very keen to learn. I wondered if somebody could advise me whether I should use a collection (such as an associative array) instead of repeating a table scan within a loop for the example below. I need to read from an input table of experiment data and if the EXPERIMENT_ID does not already exist in my EXPERIMENTS table, then add it. Here is the code I have so far. My instinct is that it my code is inefficient. Would it be more efficient to scan the EXPERIMENTS table only once and store the list of IDs in a collection, then scan the collection within the loop?
    -- Create any new Experiment IDs if needed
    open CurExperiments;
    loop
    -- Fetch the explicit cursor
    fetch CurExperiments
    into vExpId, dExpDate;
    exit when CurExperiments%notfound;
    -- Check to see if already exists
    select count(id)
    into iCheckExpExists
    from experiments
    where id = vExpId;
    if iCheckExpExists = 0 then
    -- Experiment ID is not already in table so add a row
    insert into experiments
    (id, experiment_date)
    values(vExpId, dExpDate);
    end if;
    end loop;

    Except that rownum is assigned after the result set
    is computed, so the whole table will have to be
    scanned.really?
    SQL> explain plan for select * from i;
    Explained.
    SQL> select * from table( dbms_xplan.display );
    PLAN_TABLE_OUTPUT
    Plan hash value: 1766854993
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT  |      |   910K|  4443K|   630   (3)| 00:00:08 |
    |   1 |  TABLE ACCESS FULL| I    |   910K|  4443K|   630   (3)| 00:00:08 |
    8 rows selected.
    SQL> explain plan for select * from i where rownum=1;
    Explained.
    SQL> select * from table( dbms_xplan.display );
    PLAN_TABLE_OUTPUT
    Plan hash value: 2766403234
    | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT   |      |     1 |     5 |     2   (0)| 00:00:01 |
    |*  1 |  COUNT STOPKEY     |      |       |       |            |          |
    |   2 |   TABLE ACCESS FULL| I    |     1 |     5 |     2   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       1 - filter(ROWNUM=1)
    14 rows selected.

  • SELECT Command on Associative Array

    Guys,
    I have a question on associative arrays in ORACLE.
    I m working on one assignment where I am not allowed to create any object into the database e.g. Create temporary tables, use of cursors etc.
    For data manipulation i used associative array, but at the end i want to show that result in pl/SQL developer.
    I know that I can't use select command on associative arrays.
    Any alternative/solution for it?
    Also is there any way that i can write the contents of associative array to a .csv file?

    user13478417 wrote:
    I m working on one assignment where I am not allowed to create any object into the database e.g. Create temporary tables, use of cursors etc.Then cease to use Oracle - immediately. As you are violating your assignment constraints.
    ALL SQL and anonymous PL/SQL code blocks you send to Oracle are parsed as cursors. And as you are not allowed to use cursors, it will be impossible to use Oracle as cursors is exactly what Oracle creates... and creates a lot of. For every single SQL statement. And every single anonymous PL./SQL block.
    For data manipulation i used associative array, Why? Arrays is a poor choice in Oracle as a data structure most times as it is inferior in almost every single way to using a SQL table structure instead.
    Pumping data into an array? That already severely limits scalability as the array requires expensive dedicated server (PGA) memory. It does not use the more scalable shared server (SGA) memory.
    Manipulating data in an array? That requires a "+full structure scan+" each time as it does not have the indexing and partitioning features of a SQL table.
    Running a SQL select on an array? That is using a cursor. That also means copying the entire array structure, as bind variable, from the PL/SQL engine to the SQL engine. An excellent way to waste memory resources and slow down performance... but hey you can still shout "+Look Ma, no --brains-- hands, I'm not using any SQL tables as dictated by my assignment!+".... +<sigh>+
    Any alternative/solution for it?You mean besides using Oracle correctly ?
    You could reload the shotgun and shoot yourself in the other foot too. That should distract you for from the pain in the first foot.

  • Find a element in a collection (associative array)

    I am wondering is there any way that I can look for an item in an array when the subscript is not part of a key of a table.I mean if in a employee table I can fill the array with employee info if the subscript say employee id is numeric.
    employee(emp_rec.emp_id) := emp_rec;
    and then while searching I can search by emp_id ,,,,but what if emp_id is character then do you guys have any ideas on how to assign a subscript which will make the search easier .
    thanks
    Manohar.

    With associative arrays indexed by a string (in your case, employee name), you can just use the EXISTS method. Much faster than looping through looking for a match.
    sql>declare
      2    type arr is table of emp.ename%type index by emp.ename%type;
      3    v_arr   arr;
      4    v_name  emp.ename%type;
      5  begin
      6    for r in (select ename from emp) loop
      7      v_arr(r.ename) := null;
      8    end loop;
      9    v_name := 'KING';
    10    if v_arr.exists(v_name) then
    11      dbms_output.put_line(v_name || ' exists');
    12    else
    13      dbms_output.put_line(v_name || ' does not exist'); 
    14    end if;
    15    v_name := 'SHETTY';
    16    if v_arr.exists(v_name) then
    17      dbms_output.put_line(v_name || ' exists');
    18    else
    19      dbms_output.put_line(v_name || ' does not exist'); 
    20    end if;
    21  end;
    22  /
    KING exists
    SHETTY does not exist
    PL/SQL procedure successfully completed.

  • Submiting a form with variables packed into an associative array

    I have a complex form created in flash that submits to a
    shopping cart. I was having trouble getting the variables in the
    right format for the shopping cart to accept.
    So I created a bridging script in php that fills in the
    hidden fields of a form then uses javascript to submit it to the
    cart. This works but I would like to submit the variables directly
    to the cart and eliminate the need for a bridge.
    At the moment I am simply using
    getURL("bridge.php", "_self", "POST");
    to POST the variables to the bridge.
    The bridge code is
    <?php
    $id[txt_1] = "$colortext";
    $id[txt_2] = "$xheight";
    $id[txt_3] = "$xwidth";
    $id[txt_4] = "$nopanels";
    $id[txt_5] = "$shutterstyle";
    $id[txt_6] = "$squarearea";
    $id[txt_7] = "$finish";
    $id[txt_8] = "$bifoldoption";
    $id[txt_9] = "$slidingoption";
    $id[txt_10] = "$hingedoption";
    $id[txt_11] = "$totalprice";
    $id[txt_12] = "$colorcode";
    $products_id = "28";
    ?>
    <form
    action="product_info.php?products_id=28&action=add_product"
    method="post" name="MyForm" target="_self">
    <input type="submit" name="Submit" value="Submit">
    <input name="id[txt_1]" type="hidden" value="<?php
    print($id[txt_1]); ?>">
    <input name="id[txt_2]" type="hidden" value="<?php
    print($id[txt_2]); ?>">
    <input name="id[txt_3]" type="hidden" value="<?php
    print($id[txt_3]); ?>">
    <input name="id[txt_4]" type="hidden" value="<?php
    print($id[txt_4]); ?>">
    <input name="id[txt_5]" type="hidden" value="<?php
    print($id[txt_5]); ?>">
    <input name="id[txt_7]" type="hidden" value="<?php
    print($id[txt_7]); ?>">
    <input name="id[txt_6]" type="hidden" value="<?php
    print($id[txt_6]); ?>">
    <input name="id[txt_8]" type="hidden" value="<?php
    print($id[txt_8]); ?>">
    <input name="id[txt_9]" type="hidden" value="<?php
    print($id[txt_9]); ?>">
    <input name="id[txt_10]" type="hidden" value="<?php
    print($id[txt_10]); ?>">
    <input name="id[txt_11]" type="hidden" value="<?php
    print($id[txt_11]); ?>">
    <input name="id[txt_12]" type="hidden" value="<?php
    print($id[txt_12]); ?>">
    <input name="products_id" type="hidden" value="28">
    </form>
    <script type="text/javascript"
    language="JavaScript"><!--
    document.MyForm.submit();
    //--></script>
    I am trying to create in flash 8 the equivalent of the above
    form using the function below.
    function submitvars() {
    var id: Array = new Array();
    id.txt_1 = colortext;
    id.txt_2 = xheight;
    id.txt_3 = xwidth;
    id.txt_4 = nopanels;
    id.txt_5 = shutterstyle;
    id.txt_6 = squarearea;
    id.txt_7 = finish;
    id.txt_8 = bifoldoption;
    id.txt_9 = slidingoption;
    id.txt_10 = hingedoption;
    id.txt_11 = totalprice;
    id.txt_12 = colorcode;
    var myvar:LoadVars = new LoadVars();
    myvar.id = id;
    myvar.products_id = '28';
    myvar.send("product_info.php?products_id=28&action=add_product",
    "_self", "POST");
    So far the variable products_id = ‘28’ transfers
    over to the cart fine but not the variables in the ‘id’
    array

    You're welcome.
    I've never used register globals, couldn't figure that out,
    thanks for explaining.
    The other way to do it if you want to send an array of simple
    data (usually all of one data type like string or number) is to use
    array.join("delimiter_sequence"); in flash. You can then assign it
    to a single property of your loadvars (e.g. 'id') and use explode
    in php with the same delimiter to recreate an array. This does not
    give you an associative array though, just a regular numeric
    indexed one.
    To send complex data like arrays and objects, you can use
    other encoding techniques. You can even use json: json.org has a
    json class(es) for flash and php 5 has json encoding/decoding
    support for example.
    Another way is to use amfphp and remoting, which does all the
    work for you. And of course, you have XML support as well at both
    ends, so you can always represent complex data in XML if you
    prefer. You may want to investigate these or other methods on
    future occasions.

  • Associative array related problem

    Hi All,
    When I am trying to use assotiative array in a select statement I recieve the following error:
    ORA-06550: line 9, column 22:
    PLS-00201: identifier 'COL1' must be declared
    ORA-06550: line 9, column 22:
    PLS-00201: identifier 'COL1' must be declared
    ORA-06550: line 9, column 10:
    PL/SQL: ORA-00904: : invalid identifier
    ORA-06550: line 9, column 3:
    PL/SQL: SQL Statement ignored
    Here is the example
    --create table MyTable (col1 varchar2(255), col2 varchar2(255))
    declare
      type m_ttMyTable
        is table of MyTable%rowtype index by MyTable.col1%type;
      m_tMyTable                   m_ttMyTable;
      m_sCol2 varchar2(255);
    begin
      select m_tMyTable (col1).col2  /* works with ocntant: select m_tMyTable */('col1').col2
        into m_sCol2
      from MyTable
      where rownum = 1;
    end;
    --drop table MyTableAny ideas how to workaround this?
    Thanks

    The only collection types SQL can query are ones defined in SQL using CREATE TYPE. That excludes associative arrays, as they are PL/SQL-only constructs. I'd recommend a nested table collection.
    Some more suggestions:
    www.williamrobertson.net/documents/collection-types.html

  • Associative Array our only option?

    Hello,
    I'm having a problem accepting associative arrays as the only option I have for getting data from a stored procedure. I have a good reason for not wanting to use ref cursors as I am using the stored procedure to manipulate data which I in turn would like to pass back to VB through the stored procedure and would rather not have to insert he data into a table just to re-select it for a ref cursor.
    My main concern is that with associative arrays I am expected to define the number of return results before I even generate the data. Also from what I can see I am required to set the data length for each and every item in said array one at a time. All this overhead seems like more work than what I would have to do to utilizer a reference cursor. Is there a right way to do this? I would really like to do the most straight forward way I can without the extra processing.

    Hi,
    Here's a blog post of mine that illustrates using pipelined functions and PL/SQL to return results:
    http://oradim.blogspot.com/2007/10/odpnet-tip-using-pipelined-functions.html
    Not sure if that will be helpful in your case, but perhaps it might be a place to start anyway.
    - Mark

  • Associative Array error

    I am using a couple associative arrays in my code and comparing the data in one, and if it is an asterisk, I change it to use the data in the other. Here is the meat of my code. I am running into an error at the bolded line saying I have too many values, which I don't understand because the code is the exact same as the block of code right before it where I populate the first array. FYI, the table it is pulling from only has one row. The error is listed below the code.
    Code
    DECLARE
    TYPE refresh_file_t IS TABLE OF test.loading_dock%ROWTYPE ;
    refresh_data refresh_file_t ;
    prospect_data refresh_file_t ;
    TYPE CV_TYPE IS REF CURSOR ;
    c_id CV_TYPE ;
    v_id NUMBER(10) ;
    v_phone VARCHAR2(10) ;
    v_project VARCHAR2(10) ;
    BEGIN
    OPEN c_id FOR
    'SELECT id
    FROM test.loading_dock
    WHERE rownum = 1' ;
    LOOP
    FETCH c_id INTO v_id ;
    EXIT WHEN c_id%NOTFOUND ;
    SELECT * BULK COLLECT
    INTO refresh_data
    FROM test.loading_dock
    WHERE id = v_id ;
    SELECT * BULK COLLECT
    INTO prospect_data
    FROM test.prospects
    WHERE id_number = v_id ;
    IF refresh_data(1).home_phone = '*' THEN
    v_phone := prospect_data(1).phone ;
    ELSE
    v_phone := refresh_data(1).home_phone ;
    END IF ;
    DBMS_OUTPUT.PUT_LINE(v_phone) ;
    END LOOP ;
    CLOSE c_id ;
    END ;
    Error
    ORA-06550: line 29, column 13:
    PL/SQL: ORA-00913: too many values
    ORA-06550: line 27, column 13:
    PL/SQL: SQL Statement ignored
    ORA-06550: line 34, column 46:
    PLS-00302: component 'PHONE' must be declared
    ORA-06550: line 34, column 13:
    PL/SQL: Statement ignored
    06550. 00000 - "line %s, column %s:\n%s"

    Collection prospect_data is of type refresh_file_t, which is a table of records of test.loading_dock%TYPE. Most likely tables test.loading_dock and test.prospects have different structure - test.prospects has fewer columns. So when you try to fetch from test.prospects into prospect_data you get the error Try replacing
    prospect_data refresh_file_t ;with
    TYPE prospect_data_t IS TABLE OF test.prospects%ROWTYPE ;
    prospect_data prospect_data_t ;SY.

  • Associative Array Question

    Hi All,
    I've searched through this forum trying to find information I'm needing on associative arrays with a varchar2 index without luck. What I'm looking for is a way to get the index or "key" values of the array without knowing what they are. Meaning, I wouldn't have to know the index value when designing the array but would be able to utilize them values at runtime. For those familiar with Java it would be like calling the keySet() method from a Map object.
    So, if I have an array of TYPE COLUMN_ARRAY IS TABLE OF VARCHAR2(4000) INDEX BY VARCHAR2(100) is there any way to dynamically get the index values without knowing what they are?
    Any help is appreciated.
    Thanks

    Thanks for the response.
    I am aware of using FIRST and NEXT for iterating the array but can I extract the index value of the current element into a variable when I don't know what the index value is at runtime ?
    Thanks

  • Associative array type for each blob column in the table

    i am using the code in given link
    http://www.oracle.com/technology/oramag/oracle/07-jan/o17odp.html
    i chnages that code like this
    CREATE TABLE JOBS
    JOB_ID VARCHAR2(10 BYTE),
    JOB_TITLE VARCHAR2(35 BYTE),
    MIN_SALARY NUMBER(6),
    MAX_SALARY NUMBER(6),
    JOBPIC BLOB
    CREATE OR REPLACE PACKAGE associative_array
    AS
    -- define an associative array type for each column in the jobs table
    TYPE t_job_id IS TABLE OF jobs.job_id%TYPE
    INDEX BY PLS_INTEGER;
    TYPE t_job_title IS TABLE OF jobs.job_title%TYPE
    INDEX BY PLS_INTEGER;
    TYPE t_min_salary IS TABLE OF jobs.min_salary%TYPE
    INDEX BY PLS_INTEGER;
    TYPE t_max_salary IS TABLE OF jobs.max_salary%TYPE
    INDEX BY PLS_INTEGER;
    TYPE t_jobpic IS TABLE OF jobs.jobpic%TYPE
    INDEX BY PLS_INTEGER;
    -- define the procedure that will perform the array insert
    PROCEDURE array_insert (
    p_job_id IN t_job_id,
    p_job_title IN t_job_title,
    p_min_salary IN t_min_salary,
    p_max_salary IN t_max_salary,
    p_jobpic IN t_jobpic
    END associative_array;
    CREATE OR REPLACE package body SHC_OLD.associative_array as
    -- implement the procedure that will perform the array insert
    procedure array_insert (p_job_id in t_job_id,
    p_job_title in t_job_title,
    p_min_salary in t_min_salary,
    p_max_salary in t_max_salary,
    P_JOBPIC IN T_JOBPIC
    ) is
    begin
    forall i in p_job_id.first..p_job_id.last
    insert into jobs (job_id,
    job_title,
    min_salary,
    max_salary,
    JOBPIC
    values (p_job_id(i),
    p_job_title(i),
    p_min_salary(i),
    p_max_salary(i),
    P_JOBPIC(i)
    end array_insert;
    end associative_array;
    this procedure is called from .net. from .net sending blob is posiible or not.if yes how

    Ok, that won't work...you need to generate an image tag and provide the contents of the blob column as the src for the image tag.
    If you look at my blog entry -
    http://jes.blogs.shellprompt.net/2007/05/18/apex-delivering-pages-in-3-seconds-or-less/
    and download that Whitepaper that I talk about you will find an example of how to do what you want to do. Note the majority of that whitepaper is discussing other (quite advanced) topics, but there is a small part of it that shows how to display an image stored as a blob in a table.

  • Associative Array and Blob

    I’m currently working on a system that allows the users to upload an Excel spreadsheet (.xls) in the system. The upload page is a PL/SQL cartridge. Then I’ve written a Java servlet (using Oracle Clean Content) to convert the XLS into a CSV and store it back in the database. (it is stored in the “uploaded_files” table as a blob). I’m trying to create another procedure to read the contents of the blob and display a preview of the data on the screen (using an html table (will be done using cartridge)). After the preview, the user can choose to submit the data into the database into the “detail_records” table or simply discard everything.
    I've been trying to use an associative array to grab all the data from the blob but I’m getting confused about how to implement it in my situation.
    Can someone provide any examples of this nature?
    Any help is greatly appreciated.

    I decided to create a "record" type with all the columns from my excel spreadsheet. Then I will create a table type of records
    I am doing something like this:
    declare
    type s_record is record
                            (l_name varchar2(100),
                             f_code varchar2(4) ,
                             l_code varchar2(6),
                             d_date varchar2(5),
                             d_type varchar2(5),
                             price number,
                             volume number,
                             tax number,
                             amount_paid number
    type s_data_tab is table of s_record index by binary_integer;
    v_s_data s_data_tab;
    v_indx binary_integer :=0;
    begin
    end; I am getting confused about parsing an entire row of values separated by commas into a row in the temporary table created above.
    I know I need a loop, but from what I understand, the way to populate data needs to be something like this, for example:
    for v_indx in 0..data_size loop
       v_s_data(v_indx).l_name:= 'Company A';
       v_s_data(v_indx).f_code := '2700';
    end loop; But I'm not sure how this approach should be used to parse an entire row at once.
    Any help appreciated.

  • Associative  array binding - poor performance

    Dear All
    i have very very low performence when i am inserting a binary array using associative array bind. i mean when i insert huge jagged binary array.
    the jagged array has
    BinarryArray[0][0]........BinarryArray[0][8000]
    BinarryArray[1][0]........BinarryArray[1][8000]
    BinarryArray[3600][0]........BinarryArray[3600][8000]
    BinarryArray[0] - i have 8000 byte end so on. total is 3600 X 8000
    that means 28,800KB hence to ~28MB.
    the C# code is as follows
    string strInsert "Insert Into T Values(t.SEQUENCE.currval, :paramArr);
    OracleCommand objCommand = new OracleCommand;
    OracleParameter objParam = new OracleParameter(paramArr, OracleDbtype.blob, 8000, system.data.ParameterDirection.Input,true,0,0,"ColumnName", system.data.DataRowVersion.Curren, BinarryArray);
    objCommandtext = strInsert;
    objCommand.ArrayBindCount = BinarryArray.Length;
    objCommand.Parameters.Clear();
    objCommand.Parameters.Add(paramArr);
    objCommand.ExecuteNonQuery();
    In generall the Insertion is good for each row in the array i get separate row in the DB but it works so slow.
    why??????
    see the code below

    well??

  • Associative array EXISTS() DML

    Is there a way to include the EXISTS() method of an associative array in a DML statement? For example:
    This is fine...
    SQL> declare
    2 type distTblTyp is table of number index by varchar2(8);
    3 testTbl distTblTyp; testVar varchar2(30);
    4 begin
    5 testTbl('a') := 1;
    6 if (testTbl.exists('a')=true) then
    7 null;
    8 end if;
    9* end;
    SQL> /
    PL/SQL procedure successfully completed.
    But this fails...
    SQL> declare
    2 type distTblTyp is table of number index by varchar2(8);
    3 testTbl distTblTyp; testVar varchar2(30);
    4 begin
    5 testTbl('a') := 1;
    6 select decode(testTbl.exists('a'),true,'a','b')
    7 into testVar from dual;
    8* end;
    SQL> /
    select decode(testTbl.exists('a'),true,'a','b')
    ERROR at line 6:
    ORA-06550: line 6, column 24:
    PL/SQL: ORA-01747: invalid user.table.column, table.column, or column
    specification
    ORA-06550: line 6, column 2:
    PL/SQL: SQL Statement ignored
    PL/SQL: SQL Statement ignored
    Since I won't know which index elements exist until execution time, I want to have an insert statement (ran within a loop) with ~100 field values like:
    insert into table [tablename]
    values (
    decode(testTbl.exists('a'), true, testTbl('a'), null),
    decode(testTbl.exists('b'), true, testTbl('b'), null)
    Any suggestions appreciated.

    As Gerd suggested...
    SQL> create or replace package my_test_pk as
      2   type my_type is table of number index by varchar2(2);
      3   v_my_type my_type;
      4   function ifExists(v_i varchar2) return number;
      5   procedure runTest;
      6  end;
      7  /
    Package created.
    SQL> create or replace package body my_test_pk as
      2  function ifExists(v_i varchar2) return number is
      3     v_r number;
      4     begin
      5     v_r := 0;
      6     if (v_my_type.exists(v_i)) then v_r := 1; end if;
      7     return v_r;
      8     end;
      9  
    10    procedure runTest is
    11    v_check varchar2(2);
    12    begin
    13     v_my_type('a') := 1;
    14    select decode(ifExists('a'),1,'a',null) into v_check from dual;
    15   dbms_output.put_line(v_check);
    16     select decode(ifExists('b'),1,'b','N') into v_check from dual;
    17    dbms_output.put_line(v_check);
    18    end;
    19     end;
    20  /
    Package body created.
    SQL> exec my_test_pk.runtest;
    a
    N
    PL/SQL procedure successfully completed.
    SQL>

Maybe you are looking for