SQL from PLSQL Table

Hi,
I have a PLSQL Table with two columns.
Is there a way where i can read the PLSQL Table data into SQL.
Below is the sample code.
Is there a way to get distinct records of contact_person and party_id
IF x_msg_tbl.COUNT > 0
THEN
FOR i IN x_msg_tbl.FIRST .. x_msg_tbl.LAST
LOOP
IF x_msg_tbl.EXISTS (i)
THEN
LOG(x_msg_tbl(i).contact_person);
LOG(x_msg_tbl(i).party_id);
LOG(i);
END IF;
END LOOP;
END IF;
Thanks,
Srikanth

> Is there a way where i can read the PLSQL Table data into SQL.
Pet peeve of mine - calling an array or collection a PL/SQL "table". There is no such thing as a PL/SQL table. The term "table", especially in the RDBMS context we're using PL/SQL, has a very specific meaning.
And an array or collection in PL/SQL is nothing at all like a table.
But because of this term, developers are under the very misguided impression that arrays/collections in PL/SQL can be treated as tables. To the point where they want to use SQL against them.. because they are mistakenly and very incorrectly called "tables".
SQL against a PL/SQL structure is expensive. Why? Because the SQL engine cannot run against data structures in the PL/SQL engine. That data structure needs to be 'shipped' from PL/SQL to SQL, cast into a SQL structure, in order for the SQL engine to run SQLs against it.
Which begs the question then - why is that data not in the SQL engine in the first place? Something like a temp session table will be a lot more flexible, scalable and a lot faster.
The best place for data is in Oracle tables. Not in PL/SQL collections are arrays.
Why then PL/SQL collections and arrays? For the same reason these primitive data structures exist in most other 3GL languages. Dealing with local programming data in a structure way. And in PL/SQL specifically, to create a larger buffer for shipping data between PL/SQL and SQL (bulk processing) in order to reduce context switching. It is not intended as an alternative to a database table.
And as soon as you want to use SQL against it, you are saying you want it to be like a database table. In which case why are you not using a database table?

Similar Messages

  • How to retrieve data from plsql table in BI publisher Data template

    Hi All,
    I have created a data template for XML publisher report. In data template i m getting data from plsql table. for that i have created one package with pipelined function. I am able to run that sql from sql developer .But if i run the concurrent program then i got error like "java.sql.SQLSyntaxErrorException: ORA-00904: "XXXXX": invalid identifier".
    I have used the same parameters in Data template and concurrent program....
    please clarify me what needs to be done....
    thanks in advance....
    Regards,
    Doss

    Hi Alex ,
    i am using pipelined function and get the data from cursor and load it into plsql table (nested table). and i use the below in my data template to fetch the data:
    <sqlStatement name="Q1">
    <![CDATA[select * from  table(PO_SPEND_RPT_PKG.generate_report(P_ORG_ID,P_SOB_ID,P_ORG_NAME,P_PERIOD_NAME,P_CLOSE_STATUS,P_E_PCARD_NEED,P_REPORT_TYPE))]]>
    </sqlStatement>
    if i run the above in sql developer i can get the result....from apps if i run i got the error "java.sql.SQLSyntaxErrorException: ORA-00904: "P_ORG_ID": invalid identifier"
    Edited by: kalidoss on Sep 14, 2012 4:32 AM

  • How to generate multiple records on a single sql from dual table

    I wanted to generate ten sequence nos in a single sql statement from dual table.
    Is there any way to use that.
    I think somebody can help me on this by using level clause

    I'm not 100% sure if I understand your requirement: Do you really want to use an Oracle Sequence, as Alex already demonstrated?
    Or just a 'one-time-bunch-of-sequential-numbers'.
    In the latter case you can just select level:
    SQL> select level
      2  from   dual
      3  connect by level <= 10;
         LEVEL
             1
             2
             3
             4
             5
             6
             7
             8
             9
            10
    10 rows selected.

  • Executing sql from table with in plsql procedure

    I wonder if anyone can help.
    I have a table that stores sql statements. They are actually a set of rules that I want to apply to my application. My intention is to execute the statement in plsql.
    EG a sql statment held in the table might be:
    'select count(id) from item where item_id = ' || constants_pkg.c_test_item || ' and client_id = ' || client_id_in
    I am trying to call this from a plsql procedure, I’ve CUT OUT some of the procedure task_rec.rule holds the statement above. The procedure is failing “invalid SQL statement”, I think the client_id_in may not be evaluating as the variable, passed into the procedure and constants_pkg.c_test_item not being taken from the constants pkg.
    EG.
    PROCEDURE create_additional_info_list(
    client_id_in IN client.id%TYPE,
    IS
    result VARCHAR2(100);
    BEGIN
    EXECUTE IMMEDIATE
    task_rec.rule
    INTO result;
    END;
    If I was to do below the code would work ok. However I require the rule to come from the table.
    EXECUTE IMMEDIATE
    'select count(id) from item where item_id = ' || constants_pkg.c_test_item || ' and client_id = ' || client_id_in
    INTO result;
    Is there anyway constants_pkg.c_test_item and client_id_in can be evaluated as variables?

    Not that I've tried this but, if possible, change the SQL in the table to have bind variable; e.g.,
    'select count(id) from item where item_id = :1 and client_id = :2 ';
    Then in the procedure
    execute immediate task
    INTO result
    USING constants_pkg.c_test_item ,
    client_id_in ;

  • How to create APEX report from data in PLSQL table

    Hi, I have a procedure that is creating/inserting records into multidimensional pslql table. I want to create a report and graph based on the data stored in plsql table. Can someone please advice how to can I select this data in apex OR point me to any sample code?
    Thanks
    Aali

    Hi,
    try to google something about ORACLE TABLE CAST
    SELECT ot.yourcolumn
    FROM
       TABLE(CAST(yourplsqltablevariable AS userdefinedoracletype)) otE.g.
    http://it.toolbox.com/blogs/oracle-guide/using-a-plsql-table-in-sql-11013
    Regards,
    R.

  • Internal PLSQL Tables Access via SQL. But how ?

    Hello,
    I want to write the result of a database query in an internal PLSQL Table. After that i would like work with this internal PLSQL Table
    in a Package/Procedure/Function.
    Important for me is to access the internal Table via SQL because i have to refactor a package wich is working with 46 Database Tables an plain SQL. I
    would like to change these DB Tables into internal PLSQL Tables.
    I have written a short example wich will explain my approach to solving this problem.
    The syntax will be accepted by the Database but my 'dbms_output.put_line' statement at the end is empty or blank.
    What do i wrong ? Would be nice if anyone can help me out.
    With best regards
    Jens
    pre work :
    create table PERSON_DB_TABLE
    (SURNAME  VARCHAR2(50),
    LASTNAME VARCHAR2(50));
    insert into PERSON_DB_TABLE values
    ('JENS','FOERSTER');
    insert into PERSON_DB_TABLE values
    ('MAX','MEIER');
    insert into PERSON_DB_TABLE values
    ('MARTHA','MUSTERMANN');
    create type PERSON_OBJECT as object (
        SURNAME  VARCHAR2(50),
        LASTNAME VARCHAR2(50));
    create type PERSON_NESTED_TABLE as table of PERSON_OBJECT;
    now my anonymous block
    declare
       v_PERSON_OBJECT        PERSON_OBJECT;
       v_PERSON_NESTED_TABLE  PERSON_NESTED_TABLE;
       v_PERSON_OBJECT_2      PERSON_OBJECT;
    begin
       for v_counter in (select SURNAME, LASTNAME into v_PERSON_OBJECT.SURNAME,
                                                                                            v_PERSON_OBJECT.LASTNAME
                                  from PERSON_DB_TABLE)
         loop
            v_PERSON_NESTED_TABLE := PERSON_NESTED_TABLE(v_PERSON_OBJECT);
         end loop;
       for v_counter in (select SURNAME, LASTNAME into v_PERSON_OBJECT_2.SURNAME,
                                                                                            v_PERSON_OBJECT_2.LASTNAME
                                  from TABLE (v_PERSON_NESTED_TABLE))
         loop
            dbms_output.put_line(v_PERSON_OBJECT_2.LASTNAME);
         end loop; 
    end;

    1386a7b8-e834-43bf-a0d4-922b548bb70b wrote:
    I need this, because my customer didn't like the idea to use Database Tables instead of Variables in the RAM. So he wants this procedure redesigned.
    As Mike says, keep this person away from your database.
    Customers should not be dictating how to implement technical solutions, they should be providing business and logical requirements.
    PL/SQL arrays/collections use expensive PGA memory, taking up valuable server resources.
    Copying data from the database to PGA memory to try and process it using PL/SQL is bad design.  SQL is designed specifically for data manipulation using database tables, so it's the ideal way to do process data... directly on database tables.

  • Table Structure SQL or PLSQL

    In the spirit of the phrase ("... no need to re-invent the wheel"), does anyone have SQL or PLSQL coding already prepared [that they'd like to share] that will query the Oracle dictionary tables and return table name and structure info? I'm specifcally looking for coding that will return Owner, Table_name, Column_name, Column_order, an indication if the column is part of the PK, and Public_synonym for the table. I attempted searching past forum messages but received only computer-freeze. I'd like to do this with one "chunk" of code. Thank you kind sirs... (and/or ladies).

    Something like this?
    (I strongly suggest you run it per username, or you'll get a lot more data than you want ;-)
    SELECT atc.owner
    ,atc.table_name
    ,syn.synonym_name public_synonym
    ,atc.column_name
    ,(SELECT 'Y'
    FROM all_cons_columns acc
    , all_constraints ac
    WHERE acc.constraint_name = ac.constraint_name
    AND acc.column_name = atc.column_name
    and ac.owner = atc.owner
    and atc.table_name = ac.table_name
    and ac.constraint_type = 'P') "PK_ind"
    FROM all_tab_cols atc
    , all_synonyms syn
    where atc.table_name = syn.table_name(+)
    and atc.owner = syn.table_owner(+)
    and syn.owner(+) = 'PUBLIC'
    and atc.owner = UPPER('&owner')
    order by atc.owner, atc.table_name, atc.column_id

  • Unable to truncate table from plsql

    i want to collect stats as my query runs.
    i cannot do it from plsql
    declare
      -- Local variables here
      i integer;
    begin
      -- Test statements here
       SET AUTOTRACE ON;
    truncate  table plan_table;
    end;how do i do it.

    Hi,
    TRUNCATE TABLE is not a PL/SQL command; it's a SQL command.
    To run a purely SQL command in PL/SQL, use EXECUTE IMMEDIATE.
    SET AUTOTRACE isn't a PL/SQL command either; it's a SQL*Plus command, and I don't know of any way to run it except from the SQL*Plus command prompt.
    I think this is what you need to do:
    SET AUTOTRACE ON;
    declare
      -- Local variables here
      i integer;
    begin
      -- Test statements here
        EXECUTE IMMEDIATE 'truncate  table plan_table';
    end;

  • Inserting data from one table into another table using PL/SQL

    HI,
    I am trying to insert values from one table into another using PL procedure, the values I want to retrieve from the table riverside1 are charac_id and charac_type and insert these values into another table called riverside2 , the stored procedure zorgs_gorfs(x,y) accepts two parameters which are 2 charac_id's of d characters in riverside1 then using insert statements inserts these characters from riverside1 into riverside2.
    CREATE OR REPLACE PROCEDURE zorgs_gorfs(x IN NUMBER, y IN NUMBER) AS
         BEGIN
              INSERT INTO riverside2
                   (charac_id)
              VALUES
                   (x);
    INSERT INTO riverside2
                   (charac_id)
              VALUES
                   (y);
          END zorgs_gorfs;
    /This works but the problem im having is that when I also try to insert the charac_type as well as the charac_id it doesnt work below is the code:
    CREATE OR REPLACE PROCEDURE zorgs_gorfs(x IN NUMBER, y IN NUMBER) AS
         BEGIN
              INSERT INTO riverside2
                   (charac_id,charac_tye)
              VALUES
                   (Select
                        charac_id,
                        charc_type
                   FROM
                        riverside1
                   WHERE
                        charac_id = x);
          END zorgs_gorfs;
    /can someone kindly sort me out

    modify this sql
    INSERT INTO riverside2
                   (charac_id,charac_tye)
              VALUES
                   (Select
                        charac_id,
                        charc_type
                   FROM
                        riverside1
                   WHERE
                        charac_id = x);as
    INSERT INTO riverside2
                   (charac_id,charac_tye)
              VALUES
                   (Select
                        charac_id,
                        charc_type
                   FROM
                        riverside1
                   WHERE
                        charac_id in ( x,y));But my suggestion would be consider revising your approach. It does not look that good.
    Thanks,
    karthick.

  • Create a table in SQL Server, Export tables from Microsoft Excel to Microsoft SQL Server, Populate the created table

    Hello team,
    I have a project that I need to do, what is the best approach for each step?
    1- I have to create a table in Microsoft SQL Server.
    2- I have to import data/ tables from Microsoft Excel or Access to Microsoft SQL Server. Should I use Microsoft Visual Studio to move data from Excel or Access?
    3-I should populate the created table with the data from the exported data.
    4-How should I add the second and third imported table to the first table? Should I use union query?
    After I learn these, I will bring up the code to make sure what I do is right.
    Thanks for all,
    Guity
    GGGGGNNNNN

    Hello Naomi,
    I have imported all the tables into SQL Server,
    I created a table:
    CREATE
    TABLE dbo.Orders
    Now I want to populate this table with the values from imported tables, will this code take care of this task?
    INSERT INTO dbo.Orders(OrderId, OrderDate)
    SELECT OrderId, OrderDate
    FROM Sales.Orders
    UNION
    SELECT OrderId, OrderDate
    FROM Sales.Orders1
    Union
    SELECT OrderId, OrderDate
    FROM Sales.Orders2
    If not, what is the code?
    Please advise me.
    GGGGGNNNNN
    GGGGGNNNNN

  • How can I retrieve data from one table to another automatic in SQL?

    Hi, everione,
    I am having a big problem, trying to create datebase.
    I have 3 tables: SUPERAVATAR, MASTERAVATAR, MEGAAVATAR.
    - SuperAvatars are heroes in an online role playing gaming. They have an ID, ‘superavatarID’ which contain an UNIQUE NUMBER NOT NULL PRIMARY KEY to identify them.
    A wisdom – ‘trickster’,’conjuror’,’magician’, etc..
    A current owner… who is the user or player of the game and has that Super Avatar– we associate the link to USERID to know the person.
    SuperAvatars can be fathers or mothers of Mega Avatars.
    -MegaAvatars are the children of SuperAvatars…. They also have an ID UNIQUE NUMBER NOT NULL PRIMARY KEY to indentify them.
    A magic power – it can be a ‘Leader’ or ‘Sheep’…
    A ‘parent’ – parent is the number identifying to know to who Super Avatar belongs.
    e.g.
    SUPERAVAT WISD CURRENTOWNER FATHEROF MOTHEROF
    1 Thick 3 1
    2 Mentally Ch. 11 3
    3 Smart 9 2
    4 Genius 16 4
    5 Thick 19
    MEGAAVATARID MAGICPOWER PARENT
    1 MAGICIAN 1
    2 WIZARD 3
    3 SORCERER 2
    4 MAGICIAN 4
    -We see that MEGAAVATAR 1 has a magic power as Magician and his father is ‘1’. ‘1’ identifies the SUPERAVATAR.
    We see SUPERAVATARID…. who has the number ‘1’? the first in the row… who has wisdom – thick and he belongs to the USER with ID number 3.
    -We see MEGAAVATARID… we choose the number 2…. His magic power is as WIZARD… and his father is the number 3.
    We see SUPERAVATARID now… we look up the SuperavatarID 3…. We can see he has a wisdom – GENIUS… who belongs to the USERID 16 and he is father of MEGAAVATAR number 2.
    The list can carry on and never stop.
    I have this Problems:
    We create in this example 3 tables: Users, SuperAvatar, MegaAvatar
    SQL
    CREATE TABLE users(userID NUMBER CONSTRAINT pk_user PRIMARY KEY,email VARCHAR2(50) NOT NULL UNIQUE,password VARCHAR2(15) NOT NULL UNIQUE,subscription CHAR(8) NOT NULL CHECK (subscription IN('ACTIVE' , 'INACTIVE' ) ) );
    CREATE TABLE superavatar(superavatarID NUMBER CONSTRAINT pk_superavatar PRIMARY KEY, wisdom VARCHAR2(19) NOT NULL CHECK (wisdom IN ('THICK', 'MENTALLY CHALLENGED', 'AWAKE', 'SMART', 'GENIUS')), currentOwner NUMBER NOT NULL, fatherOf NUMBER,motherOf NUMBER);
    CREATE TABLE megaavatar (megaavatarID NUMBER CONSTRAINT pk_megaavatar PRIMARY KEY, magicPower VARCHAR2(12) NOT NULL CHECK (magicPower IN('TRICKSTER','CONJUROR','MAGICIAN','WIZARD','SORCERER')), parent NUMBER);
    Now, the 3 tables are created…..
    What happen when we try to insert values to this table?
    In this case we insert to User Table some examples:
    INSERT INTO users VALUES('3','[email protected]','great78','ACTIVE');
    INSERT INTO users VALUES('9','[email protected]','chrisandra)','ACTIVE');
    Now, we insert to SuperAvatar some examples;
    INSERT INTO superavatar VALUES('1','THICK','3','1','');
    INSERT INTO superavatar VALUES('3','SMART','9','3','');
    |
    |
    ‘9’ is the UserID that we already insert to the User table
    What’s the problem?
    We have to insert manually the data from USERID to CURRENTOWNER as we didn’t match or link CURRENTOWNER from SUPERAVATAR Table to USERID from USER Table with a SQL CODE.
    What happen if we have thousands of USERS that they register to this game…? We will never know to how belongs that SUPERAVATAR but if someone do it manually can spend a year.
    I am trying to fix this problem …. I add in SUPERAVATAR TABLE ‘CHECK’ in currentOwner..
    SQL> CREATE TABLE superavatar
    (superavatarID NUMBER CONSTRAINT pk_superavatar PRIMARY KEY, wisdom VARCHAR2(19) NOT NULL CHECK (wisdom IN ('THICK', 'MENTALLY CHALLENGED', 'AWAKE', 'SMART', 'GENIUS')),
    currentOwner NUMBER NOT NULL CHECK (currentOwner IN(SELECT userID FROM users)),
    fatherOf NUMBER,
    motherOf NUMBER);
    ERROR:
    ORA-02251: subquery not allowed here
    It doesn’t work.
    Please HELP, I have exam tomorrow
    thank you
    Desy

    Hallo,
    you can use trigger on table USER and fill the userid in AVATAR.currentowner,
    but i don't understand, how you join these tables ?
    Which user id must come in which column currentowner ?
    Design problem ?
    Regards
    Dmytro

  • How to delete a row from a SQL Server CE Table with multiple JOINs?

    I want to delete a record from a SQL Server CE table.
    There are 3 tables scripts, options and results. I would like to remove a record from the results table. The where clause contains dynamic information which retrieved via other queries to different tables in the same database. These queries work fine and deliver
    the desired data.
    The Compact server is a clone of a remote table created using the sync framework. The same query to the remote table works fine.
    The error I get is:
    There was an error parsing the query. [ Token line number = 1,Token line offset = 10,Token in error = from ]
    The code that throws the exception is as follows:
    Dim connLoc As SqlCeConnection = New SqlCeConnection(My.Settings.ConnectionString)connLoc.Open()     Dim strDel As String = "Delete r from ResultsTable r inner join OptionsTable o ON o.TestName=r.TestName inner join ScriptTable c ON r.TestName=c.TestName WHERE r.TestName = '" & ds1Loc.Tables(0).Rows(0)(1) & "' AND [Index] = '" & lstIndex & "'"Dim cmdDel As SqlCeCommand = New SqlCeCommandcmdDel.CommandText = strDelcmdDel.Connection = connLoccmdDel.ExecuteNonQuery()
    The values held in ds1Loc.Tables(0).Rows(0)(1) and lstIndex are
    correct so should not be the problem.
    I also tried using parameterised queries
    Dim strDel As String = "Delete r from [ResultsTable] r inner join [OptionsTable] o ON o.TestName=r.TestName inner join [ScriptTable] c ON r.TestName=c.TestName WHERE r.TestName = @TestName AND [Index] = @lstIndex"
    Dim cmdDel As SqlCeCommand = New SqlCeCommand        cmdDel.CommandText = strDel       
    With cmdDel.Parameters           
    .Add(New SqlCeParameter("@TestName", ds1Loc.Tables(0).Rows(0)(1)))           
    .Add(New SqlCeParameter("@lstIndex", lstIndex))       
    End With 
    cmdDel.Connection = connLoc        cmdDel.ExecuteNonQuery()
    I have tried replacing the "=" with "IN" in the the WHERE clause but this has not worked.
    Is it the join that is causing the problem? I can do a select with the same search criteria and joins from the same database.
    Also this query works with SQL Server. Is it perhaps that SQL CE does not support the Delete function the same as SQL Server 2008? I have been looking at this for a while now and cannot find the source of the error. Any help would be greatly appreciated.

    Hello,
    In SQL Server Compact, we can use join in FROM clause. The DELETE statement fail may be caused by the FOREIGN KEY constraint.
    Please refer to:
    DELETE (SQL Server Compact)
    FROM Clause (SQL Server Compact)
    Regards,
    Fanny Liu
    Fanny Liu
    TechNet Community Support

  • In PL-SQL archive data from a table to a file

    I am currently developing a vb app where I need to archive data from a table to a file. I was hoping to do this with a stored procedure. I will also need to be able to retrieve the data from the file for future use if necessary. What file types are available? Thanks in advance for any suggestions.

    What about exporting in an oracle binary format? The export files cannot be modifiable. Is there a way to use the export and import utility in PL/SQL?
    null

  • How to Export data from a Table to Excel using PL/SQL Code

    Hi,
    I need to export data from a table to the excel sheet using PL/SQL script.
    could you pls provide with custom codes or sample procedures.
    Bobby

    http://asktom.oracle.com/pls/ask/f?p=4950:8:7947129213057862756::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:728625409049

  • Request for an sql to scan for a special character from the tables

    Hi Gurus
    request for an sql statement for finding the character (and replace with a single byte character ) which occupy
    multibytes(in a unidata char set database) the database which is yet to be migrated to unidata(multibyte) database
    any kind of help is highly apprciated
    Thanks in advance

    Query below will find all bulti-byte characters in string column:
    select  string_column,
            substr(string_column,column_value,1)
      from  some_table,
            table(
                  cast(
                       multiset(
                                select  level
                                  from  dual
                                  connect by level <= length(string_column)
                       as sys.OdciNumberList
      where lengthb(substr(string_column,column_value,1)) > 1
      order by string_column,
               column_value
    /SY.

Maybe you are looking for

  • HDD Upgrade on a Late 2006 Mini - Some Pre Op advice please!

    Hi there I'm looking to update the HDD in my Mac Mini (Model MA608LL/A) and would like a bit of advice and to ask a few questions on whether the drives I'm looking at are suitable. The drives i'm looking at are: Hitachi Travelstar 7K500 250GB 2.5" SA

  • Disk errors in Windows Vista

    I have new Fujitsu Notebook running Windows Vista home premium. Everytime I plug in my iPod to sync it, I get an error window saying that I need to scan my drive for errors. It does not restrict access to my iPod in iTunes but it does slow the sync p

  • URLs are not being recognized inside PDF

    URL links inside a PDF that I've created in InDesign CS5 are not being recognized. I have email and website URLs embedded inside a PDF that was created in InDesign. These links are being recognized and I can click on them in Chrome, Opera, IE or Safa

  • When i try to send e-mails it says regected as wont allow relaying

    hi i used to be able to send e-mails now it says it cant as it doesnt alllow relaying? please help

  • JMS-MQSeries without J2EE

    Hi, I tried to compile the SimpleTopicPublisher and SimpleTopicSubscriber from the following link. I used the javax.jms.jar and the jms.jar from sun. http://java.sun.com/products/jms/tutorial/1_3_1-fcs/doc/client.html#1027256 The code got compiled. I