Create a temporary table of XmlType

I am interested in other ways to achieve this.
The solution below works when each statement is executed seperatly(Toad f5), but not at once (Toad F9)

To run this from Java code, it is best to have it in a single queery/statement

any ideas of ways to do this is very welcome.

CREATE TABLE CONTROL_SETTINGS
(
CONTROL_SETTINGS_ID NUMBER (10) NOT NULL,
SYS SETTINGS_XML. XMLTYPE,
SETTINGS_NAME VARCHAR2 (128 CHAR) NOT NULL
)

CREATE TABLE COMPANY
(
COMPANY_ID int,
company_name varchar (255)
)

INSERT INTO THE VALUES OF THE COMPANY (3456, '3456')

SELECT * FROM COMPANY
where company.company_name = '3456'

INSERT INTO CONTROL_SETTINGS VALUES (5, XMLType ("< parameters >
< order >
< > 234 order_id < / order_id >
< company > 3456 < / company >
< / order >
< order >
< > 4563 order_id < / order_id >
< company > 5674 < / company >
< / order >
((< / Parameter > '), 'ORDER');


create table
map_order
as
(SELECT p.settings_name,
extractValue (value (order_seq), "/ order/order_id") as order_id,.
extractValue (value (order_seq), "/ order/company") as a business
CONTROL_SETTINGS p,
Table (XMLSequence (p.settings_xml.extract('/settings/order'))) order_seq
WHERE p.settings_name like 'COMMAND');


SELECT * from map_order
LEFT JOIN map_order.company = company.company_name IT company;

DROP TABLE map_order;

There isn't a single if statement.

The only thing you can do is to wrap in an anonymous block, but then all your DDL and DML that use the new table will have to be converted to dynamic SQL.

What you do is a very bad idea.

Tags: Database

Similar Questions

  • Create a temporary table using EXECUTE IMMEDIATE

    Hello

    I need to create a report more complex which must have three different queries. I use a determined IF clause that the query that uses the report, according to the parameters.

    I want to write the output to a csv file, so I created a PROCEDURE.

    The first package of the procedure has the three SQL and the IF clause in order to determine the query that the report uses and stores the query code in a variable (v_sql), which is passed to the PROCEDURE that needs to write to the output of the report.

    I tried to create a table with data from the request in order to make a LOOP and exit, something like this:

    WRITE_FILE (errBUFF of the PROCEDUREOUT VARCHAR2,
    retCODEOUT VARCHAR2,
    v_sqlIN VARCHAR2)

    IS

    ContorNUMBER;

    BEGIN

    EXECUTE IMMEDIATE v_sql;
    SLIDE G
    IS
    Select * from XXROR_REG_MF_TBL;
    --
    -initialization
    --
    retCode: = 0;
    errBUFF: = NULL;
    Contor: = 0;
    --
    -cursor
    --

    FOR X IN G
    LOOP
    APPS. FND_FILE.
    PUT_LINE)
    APPS. FND_FILE. OUTPUT,
    ....)

    I should mention that v_sql is something like:

    CREATE GLOBAL TEMPORARY TABLE ACEs (SELECT * of the double);

    I can't really do that, so I was wondering if you have any suggestions

    Thank you

    Claudiu

    Hello

    I don't think you need a table at all. You can set the cursor based on the SQL passed as parameter

    https://docs.Oracle.com/database/121/LNPLS/dynamic.htm#LNPLS629

    Concerning

    Marcus

  • Create a temporary table as select fails... Why?

    Hello, I have this simple stored procedure

    PROCEDURE prueba_cursor is
    BEGIN

    CREATE TEMPORARY TABLE global emp_tab ON COMMIT PRESERVE ROWS AS
    SELECT T.STATUS_CD IN THE T_CRES_FILES T;


    END prueba_cursor;

    I get the following error

    "PLS-00103: encountered the symbol"CREATE"when waiting for one of the following values:

    (begin case declare exit for goto if loop mod null pragma
    raise return select update while < ID >


    "

    What's not here?
    Thank you

    Xavi says:
    Hello, I have this simple stored procedure

    PROCEDURE prueba_cursor is
    BEGIN

    CREATE TEMPORARY TABLE global emp_tab ON COMMIT PRESERVE ROWS AS
    SELECT T.STATUS_CD IN THE T_CRES_FILES T;

    END prueba_cursor;

    I get the following error

    "PLS-00103: encountered the symbol"CREATE"when waiting for one of the following values:

    (begin case declare exit for goto if loop mod null pragma
    lift the back updated select everything with

    "

    What's not here?
    Thank you

    You can't put DDL statements directly into the PL/SQL like this. Why you wrap upward in a PL/SQL procedure anyway?

    Why not:

    CREATE GLOBAL TEMPORARY TABLE  emp_tab ON COMMIT PRESERVE ROWS AS
          SELECT T.STATUS_CD FROM T_CRES_FILES T;
    

    directly as SQL?

  • How to create a temporary table in a procedure.

    How to create a temporary table in a procedure.

    Hello

    user9093700 wrote:
    How to create a temporary table in a procedure.

    Why create a temporary table in a procedure?

    Oracle has soemthing called a global temporary Table , where the table is in fact permanent, but data is automatically deleted at the end of the session (or the transaction, depending on how the table was created). What did you talk about? Why do you want to create one in a procedure?

    Temporary tables, in the sense of the tables that are created on the fly and fell just as they are used, are almost never a good way to do anything in Oracle. Explain what you want to do, and someone will help you find a good way to do it.

    If you need really to create a table (or any other kind of DDL) in a procedure, use EXECUTE IMMEDIATE.

  • Create a temporary table and insert using a select statement

    Hello

    I tried to create a temporary table and insert it by using the value in a select statement. Please see below the code

    ---
    CREATE a TEMPORARY TABLE GLOBAL Temp_Test
    (
    DATE OF DAY_FUTURE
    )
    AS
    SELECT TO_DATE (SYSDATE + ROWNUM, 'DD-MON-YY')
    DUAL CONNECT BY ROWNUM FROM < = 14)
    ---

    As soon as I run the script, the error message indicates the following:
    --

    Error from the 1 in the command line:
    CREATE a TEMPORARY TABLE GLOBAL Temp_Test
    (
    DATE OF DAY_FUTURE
    )
    ONLY select TO_DATE (sysdate + rownum, 'DD-MON-YY')
    Double connect rownum < = 14)

    Error in the command line: 2 column: 1
    Error report:
    SQL error: ORA-01773: cannot specify the types of data in this TABLE to CREATE column
    01773 00000 - 'cannot specify the types of column data in this TABLE to CREATE"
    * Cause:
    * Action:
    --


    What seems the problem? I already have the data type such as TO_DATE on my select statement.

    Any help would be appreciated

    Thank you
    SQL> CREATE GLOBAL TEMPORARY TABLE Temp_Test
      2  (
      3  DAY_FUTURE
      4  ) on commit preserve rows
      5  AS
      6  SELECT TO_DATE(SYSDATE+ROWNUM, 'DD-MON-YY')
      7  FROM DUAL CONNECT BY ROWNUM <= 14
      8  /
    
    Table created.
    
    SQL> select count(*)
      2    from temp_test
      3  /
    
      COUNT(*)
    ----------
            14
    
  • Is there a way to create a temporary table whenever someone knocks a procedure?

    I'm creating a procedure in Oracle 10 g to retrieve data in Oracle in a cognos report. The problem with the creation of a permanent table, is that several people will run this report at the same time, which means that the procedure will take place whenever someone runs this report. The permanent table will be give up the old data or the data will mingle which means that the reports of the various peoples will not correct. I tried to put a lock on the tables that would release the lock once one person made run their report, but that did not work. I suggested that we put the data directly in the slider, but what happens when executing this procedure by several people at the same time?
    Any assistance in finding ways to solve this problem would be greatly appreciated.

    user10426897 wrote:
    According to our team cognos cognos 7 has been set up to be able to do that, but cognos 8 is not.

    Your Cognos team must then do some reading. Cognos 8 is quite able to query the tables directly, our Cognos team that regularly.

    John

  • Create temporary table in the procedure

    I have a procedure which can be called at any time by multiple users. So I cann't use table in there, because on each call, the table is truncated and inserted. How can I create a temporary table in the procedure?

    Temporary tables in Oracle are different from other RDBMS like SQL Server.

    In Oracle, you create a global temporary table ONCE as part of the design of your database.

    create a global temporary table MyTableName (... columns...) on commit preserve rows;

    You can then use this table in your code as you would any other table.

    The difference is that any data that you insert in this table are only available/visible so that the code runs in the session, and if delete you / truncate the table it only removes the data for this session.  In this way, several sessions we can table without interfering with each other.

    (Note: instead of "preserve" you can change this to "delete" If you want that deleted data automatically when a commit is issued in your session, otherwise the data will be automatically deleted at the end of the session)

  • How to create temporary tables in stored procedures.

    Hello

    I am new to oracle, I have a requirement where I need to run a query in a loop for different values of where condition. Here, I need to record the results of the query on each iteration. After the end of the loop, I need to send the results to the front end. I did a lot of research for the concept of the temporary table in oracle, but I found myself unresolved except headaches. Everyone is showing how to create temporary tables in general but not in stored procedure.

    Bad, I need the concept of temporary tables, or is there an alternative way to store temporary results. My procedure looks like this.

    create or replace
    procedure uspMatchCode (parWord varchar2, p_recorderSet to types.cursor_type)
    as
    smallint parCnt;
    Start
    parcnt: = 0;
    Select count (1) in parCnt of...;
    If parcnt > 0 then
    Open for P_recorderSet
    Select field1, field2, field3,... of table1, table2, table2 where < < condition > >
    on the other
    -Here, I want to create a temporary table and store the result for the loop shape into the temporary table.
    CREATE TEMPORARY TABLE global my_temp_table (NUMBER of Column1, Column2) ON COMMIT DELETE ROWS.
    FOR parCnt in 0.3
    loop
    INSERT into my_temp_table select Field1, Field2, field3,... from table1, table2, table2 where < < condition > >
    end loop;
    Open for P_recorderSet
    Select * from < < temporary table > >
    end if;
    end;

    Any help would be great to check me on the problem.

    Thank you
    Kiran.

    This is a change to the query Kiss has posted:

    with data_text like)
    Select regexp_substr (' sales financing marketing ',' [^] +', 1, level ") val
    of tconnect by level<= length('sales="" finance="" marketing')-="" length(replace('sales="" finance="" marketing','="">
    )
    Select * from t, data_text, where t.colname like '% "| data_text. Val |' %'

    This will help you. Please change the column names and the name of the table as a result

  • create temporary table

    Any syntax error in the code below?


    CREATE a TEMPORARY TABLE GLOBAL OWN.TT_tmp
    Did YOU SELECT distinct ssm_id, CAP.position pricing
    ON COMMIT PRESERVE ROWS;

    Error report:
    SQL error: ORA-00933: SQL not correctly completed command
    00933 00000 - "not correctly completed SQL command.
    * Cause:
    * Action:

    Hello
    Yes, there is a syntax error

    CREATE a TEMPORARY TABLE GLOBAL OWN.TT_tmp
    ON THE LINES OF COMMIT PRESERVE
    Did YOU SELECT distinct ssm_id, CAP.position pricing;

    Kind regards
    Simma...

  • What is the syntax for creating a global temporary table using a select query

    HII
    I create a global temporary table using a select query... How to speak of "on commit preserve rows ' who?


    create a table temporary global t1 select * from trn_ordbase on the lines of commit preserve;

    but this is an invalid syntax, then how to talk on commit preserve rows in this? If I don't mention, by default its recital on the validation of deleted rows.

    Please help me on this problem.
    create global temporary table t1 on commit preserve rows
      2  as select * from dual;
    
    Table created.
    
    TUBBY_TUBBZ?
    
  • PLS-00357 on a global temporary table

    Oracle 11g R2

    I am using a dynamic SQL statement to delete rows. The WHERE THERE EXIST uses a global temporary table and it gives me

    PLS-00357: Table, view or reference sequence "TMPPRE_ARC" not allowed in this context

    Any ideas of a work around?

    create global temporary table tmppre_arc
      ( id number)
      ON COMMIT PRESERVE ROWS;
    
    
    CREATE OR REPLACE PROCEDURE test_del
    IS
       v_owner_tbl varchar2(61) := 'test_table'     ;
    BEGIN   /* DELETE_SOURCE */
            EXECUTE IMMEDIATE
                'DELETE FROM ' || v_owner_tbl || ' v ' || chr(10) ||
                'WHERE EXISTS ( SELECT    null '       || chr(10) ||
                'FROM      ' || tmppre_arc || ' r '  || chr(10) ||
                'WHERE       r.id     = v.id )' ;
    END test_del;
    /
    show errors
    
    
    LIsNE/COL ERROR
    -------- -----------------------------------------------------------------
    5/9      PL/SQL: Statement ignored
    8/29     PLS-00357: Table,View Or Sequence reference 'TMPPRE_ARC' not
    allowed in this contenxt
    
    
    
    
    
             allowed in this context
    

    This is false:

    'FROM ' | tmppre_arc | ' r '  || Chr (10) |

    Should be

    "OF tmppre_arc r | Chr (10) |

    SY.

  • Clarification of temporary Table

    I have a small question, I think that must be answered easily, but I couldn't find anything it clarify for me online.

    I have a statement:

    CREATE GLOBAL TEMPORARY TABLE MATR_RPT
    ()PERCENTAGE varchar2()40),
    NUMBER of NUM_OF_CONTRACTS
    ,
    NUMBER OF NUM_OF_CONTRACTS_C
    )
    on commit preserve rows

    BUT if I used "on commit preserve rows" who wouldn t be the same using a standard non-temporary table if it maintains the lines? Or I have forgotten here?

    Thank you!

    on validation keeps the lines:

    On the temporary table will remain once the transaction is complete. These recordings will live as long as the session that inserted is connected to them. After that this session left (dc), records have disappeared.

    on commit delete rows:

    On the temporary table will be gone when the transaction is closed without worrying if the session remains online or disconnect after.

    Concerning

  • Possible to Exchange temporary table with composite range-hash partitioned table?

    Hello

    Using oracle 11.2.0.3

    We want to clean up the data in some of our existing partitioned table.

    Afetr updates check spped that is too slow for us.

    Current table is partitioned the inetrval compoiste range-hash table.  Also it is compressed - enabled for compression of basis as well

    An interval of 1 month and 1 partition by month and 4 secondary partitions in the partition of ecah.

    You want to create tenp table with the data of celan and exchange the data in this table in the 'dirty' uisng existing partitions partition exchnage.

    Is this possible?

    The plan is

    1) create temporary table containing data for 1 partition (1 month worth of data)

    (2) clean the data here

    (3) create new temporary table with these specific data which compressed and discovered partitioned with 4 secondary partitions

    (4) table 3 for swap partition dirty using partition excahnge.

    Thaks

    I think that this can be done with a combination of Exchange and Split partition partitions. Prior to Oracle 11 g, only way of redefining tables online was DBMS_REDEFINITION package. Now, you can redefine the use of partitions for Exchange & Split. Check

    http://www.Oracle-base.com/articles/Misc/partitioning-an-existing-table-using-Exchange-partition.php

    Maintenance of Partitions

    Kind regards

  • trigger on the global temporary table

    Hello

    I have a global temporary table

    CREATE GLOBAL TEMPORARY table to register)

    no_registre NUMBER primary key,

    date of create_time

    ) ON COMMIT DELETE ROWS.

    I have to write a trigger on the table every time that the insertion is made.

    create or replace trigger tri_register

    before inserting the REGISTER

    for each line

    Start

    : new create_Date: = sysdate;

    end;

    /

    This trigger can work on this registry table?

    Thank you

    913578 wrote:

    Sorry Karthik.

    the thing is that I did not have privelleges to test, I send the code to some dba who makes deployment.

    Sorry to hear that!

    Please tell me... We can write triggers on GTT?

    of course, you can!

    SQL > create a global temporary table registry
    () 2
    no_registre 3 number primary key,
    create_time date 4
    5)
    6 on the validation to delete lines;

    Table created.

    SQL > create or replace trigger register_trig before insert in the register for each line
    2 start
    3: new.create_time: = sysdate;
    4 end;
    5.

    Trigger created.

    SQL > insert into values of registry (no_registre) (1);

    1 line of creation.

    SQL > select * from registry;

    NO_REGISTRE CREATE_TI
    ----------- ---------
    1 8 JULY 13

  • How to insert into a GLOBAL TEMPORARY TABLE and get the data from it?

    The requrement is
    Split the string ENTRY point on the base and store it in a Collection. And the values of the collection will be stored in a global temporary table. Then, I'm updating some other table based on the data from the temporary table.

    There is in fact no error message. But there is no data in the temporary table and also no change in the update statement

    First of all, I'm creatiing a global temporary table only once outside the procedure.

    CREATE GLOBAL TEMPORARY table GLt (data_element number)


    create or replace procedure test_proc (p_in_string VARCHAR2) is
    i the number: = 0;
    number of POS: = 0;
    CLOB lv_str: = p_in_string;
    p_delim VARCHAR2 (1): = ', ';

    TYPE t_array IS TABLE OF VARCHAR2 (20) INDEX directory.
    t_array channels;

    BEGIN

    -cutting of string input and store in the strings (i) collection

    POS: = instr (lv_str, p_delim, 1, 1);
    WHILE (pos! = 0) LOOP
    i: = i + 1;
    Strings (i): = substr(lv_str,1,pos-1);
    lv_str: = substr (lv_str, pos + 1, length (lv_str));
    POS: = instr (lv_str, p_delim, 1, 1);
    IF pos = 0 THEN
    Strings (i + 1): = lv_str;
    END IF;
    END LOOP;

    run immediately "drop table TWG;
    run immediately ' CREATE GLOBAL TEMPORARY table (data_element number) TWG on commit preserve rows ";

    FORALL i in strings.first... Strings.Last
    INSERT INTO VALUES TWG (strings (i));
    commit;

    Update first_tbl set PIN is "XXX" where first_col in (select data_element from TWG);.
    commit;

    END test_proc;

    Published by: cedric b on January 25, 2013 12:59

    Remove the two execute immediate line. They are wrong.

    And then use the table in your code that you created at the beginning. The name is GLT.
    And delete the first commit. This validation would empty the temporary table of GLT.

    You get an error? Or it does not work as expected?

    Also, show how you call the procedure.

    Published by: Sven w. January 25, 2013 14:45

Maybe you are looking for