Global temp table trigger error on Oracle AS

we have a set of triggers that load a temp table in the before delete,update and process the table in an after statement trigger. the data that's loaded is a complaintid and when the complaintid is selected into a variable in the after statement, a No data found error is fired. This only happens on Oracle AS both 9i and 10g, it does not happen on jboss. All the app servers use connection pooling and they are 9i Enterprise Edition Dedicated database servers.
Is it possible that there is a bug in Oracle AS that allows multiple sessions to affect the same global variables ?
Sorry it's a long one, but I wanted to include everything I could
table creation script.
CREATE GLOBAL TEMPORARY TABLE TEMPEVENTS
(     COMPLAINTID VARCHAR2(20) NOT NULL ENABLE,
     COMPLAINTEVENTID NUMBER NOT NULL ENABLE,
     STARTDATE DATE,
     EVENTTYPE NUMBER,
     EVENTSUBTYPE NUMBER,
     DELETED NUMBER
) ON COMMIT DELETE ROWS
Before update trigger-- as a test I saved the data in a permanent table and all columns have usable values.
create or replace trigger BeforeUpdateReportDataROW
BEFORE Delete or Update of deleted, startdate on complaintevents
FOR EACH ROW
BEGIN
IF (DELETING AND :old.deleted = 0) OR (UPDATING AND :new.deleted=1 AND :old.startDate = :new.startDate) THEN
     TEMPDATA.v_triggerType := 'D';
ELSIF UPDATING AND :old.deleted=1 AND :old.startDate = :new.startDate THEN /*undeleting*/
     TEMPDATA.v_triggerType := 'U';
ELSIF UPDATING AND :old.startDate != :new.startDate THEN /*new date*/
     TEMPDATA.v_triggerType := 'S';
ELSE
     TEMPDATA.v_triggerType := 'N';
END IF;
TEMPDATA.v_NumEntries := TEMPDATA.v_NumEntries + 1;
TEMPDATA.v_complaintids(TEMPDATA.v_NumEntries) := :old.complaintid;
TEMPDATA.v_complainteventids(TEMPDATA.v_NumEntries) := :old.complainteventid;
END;
After statement trigger -- the error happens on the
SELECT complaintid
INTO complaintid
FROM complaintevents
WHERE complaintid = tempdata.v_complaintids (loop_index)
AND complainteventid = tempdata.v_complainteventids (loop_index);
statement. this is all one transaction the complaintid is loaded from the complaintevent table, and is not a primary key, nor is there only one record in the complaintevent table for each complaintid.
create or replace trigger complaintevents_del_upd_trig
AFTER DELETE OR UPDATE OF deleted, startdate
ON complaintevents
DECLARE
complaintid VARCHAR2 (20);
loop_index NUMBER;
hold_complaintid VARCHAR2 (20);
BEGIN
IF tempdata.v_triggertype = 'D'
THEN /*deleting event*/
hold_complaintid := ' ';
FOR loop_index IN 1 .. tempdata.v_numentries
LOOP
SELECT complaintid
INTO complaintid
FROM complaintevents
WHERE complaintid = tempdata.v_complaintids (loop_index)
AND complainteventid = tempdata.v_complainteventids (loop_index);
IF hold_complaintid != complaintid
THEN
INSERT INTO tempevents
(complaintid, complainteventid, startdate, eventtype,
eventsubtype, deleted)
SELECT complaintid, complainteventid, startdate, eventtype,
eventsubtype, deleted
FROM complaintevents
WHERE complaintid = tempdata.v_complaintids (loop_index);
END IF;
DELETE tempevents
WHERE complainteventid =
tempdata.v_complainteventids (loop_index)
OR deleted = 1;
hold_complaintid := complaintid;
END LOOP;
ELSIF tempdata.v_triggertype = 'U'
THEN /*undeleting*/
hold_complaintid := ' ';
FOR loop_index IN 1 .. tempdata.v_numentries
LOOP
SELECT complaintid
INTO complaintid
FROM complaintevents
WHERE complaintid = tempdata.v_complaintids (loop_index)
AND complainteventid = tempdata.v_complainteventids (loop_index);
IF hold_complaintid != complaintid
THEN
INSERT INTO tempevents
(complaintid, complainteventid, startdate, eventtype,
eventsubtype, deleted)
SELECT complaintid, complainteventid, startdate, eventtype,
eventsubtype, deleted
FROM complaintevents
WHERE complaintid = tempdata.v_complaintids (loop_index);
END IF;
DELETE tempevents
WHERE deleted = 1;
INSERT INTO tempevents
(complaintid, complainteventid, startdate, eventtype,
eventsubtype, deleted)
SELECT complaintid, complainteventid, startdate, eventtype,
eventsubtype, 0
FROM complaintevents
WHERE complainteventid =
tempdata.v_complainteventids (loop_index);
hold_complaintid := complaintid;
END LOOP;
ELSIF tempdata.v_triggertype = 'S'
THEN /*date change*/
hold_complaintid := ' ';
FOR loop_index IN 1 .. tempdata.v_numentries
LOOP
SELECT complaintid
INTO complaintid
FROM complaintevents
WHERE complaintid = tempdata.v_complaintids (loop_index)
AND complainteventid = tempdata.v_complainteventids (loop_index);
IF hold_complaintid != complaintid
THEN
INSERT INTO tempevents
(complaintid, complainteventid, startdate, eventtype,
eventsubtype, deleted)
SELECT complaintid, complainteventid, startdate, eventtype,
eventsubtype, deleted
FROM complaintevents
WHERE complaintid = tempdata.v_complaintids (loop_index);
END IF;
DELETE tempevents
WHERE deleted = 1;
hold_complaintid := complaintid;
END LOOP;
ELSE
RETURN;
END IF;
END;

CREATE GLOBAL TEMPORARY TABLE test_glb ON COMMIT DELETE ROWS
AS SELECT * FROM test1;btw I'm assuming you are just using the SELECT statement to copy the definition of test1. Since DDL statements commit, there will be no rows in test_glb after creating it.
Edited by: William Robertson on Feb 23, 2009 7:31 AM

Similar Messages

  • Global temp table throwing error

    Hi,
    I am trying to create global temp table throwing error
    please help
    SQL> create global temporary table test_glb as ( select col1 from test1) on commit delete rows;
    create global temporary table test_glb as ( select col1 from test1) on commit delete rows
    ORA-00933: SQL command not properly ended
    Thanks
    Rangan S

    CREATE GLOBAL TEMPORARY TABLE test_glb ON COMMIT DELETE ROWS
    AS SELECT * FROM test1;btw I'm assuming you are just using the SELECT statement to copy the definition of test1. Since DDL statements commit, there will be no rows in test_glb after creating it.
    Edited by: William Robertson on Feb 23, 2009 7:31 AM

  • Use global temp table for DML error logging

    our database is 11.2.0.4 enterprise edition on solaris 10
    we are wondering if anyone has an opinion of or has done this before, to use a global temp table for DML error logging. We have a fairly busy transactional database with 2 hot tables for inserts. The regular error table created with dbms_errlog has caused many deadlocks which we don't quite understand yet. we have thought using global temp table for the purpose, and that seemed to work, but we can't read error from the GTT, the table is empty even reading from the same session as inserts. Does anyone have an idea why?
    Thanks

    The insert into the error logging table is done with a recursive transaction therefore it's private from your session which is doing the actual insert.
    Adapted from http://oracle-base.com/articles/10g/dml-error-logging-10gr2.php
    INSERT INTO dest
    SELECT *
    FROM  source
    LOG ERRORS INTO err$_dest ('INSERT') REJECT LIMIT UNLIMITED;
    99,998 rows inserted.
    select count(*) from dest;
      COUNT(*)
        99998
    SELECT *
    FROM  err$_dest
    WHERE  ora_err_tag$ = 'INSERT';
    1400    "ORA-01400: cannot insert NULL into ("E668983_DBA"."DEST"."CODE")"        I    INSERT    1000        Description for 1000
    1400    "ORA-01400: cannot insert NULL into ("E668983_DBA"."DEST"."CODE")"        I    INSERT    10000        Description for 10000
    1400    "ORA-01400: cannot insert NULL into ("E668983_DBA"."DEST"."CODE")"        I    INSERT    1000        Description for 1000
    1400    "ORA-01400: cannot insert NULL into ("E668983_DBA"."DEST"."CODE")"        I    INSERT    10000        Description for 10000
    rollback;
    select count(*) from dest;
      COUNT(*)
            0
    SELECT *
    FROM  err$_dest
    WHERE  ora_err_tag$ = 'INSERT';
    1400    "ORA-01400: cannot insert NULL into ("E668983_DBA"."DEST"."CODE")"        I    INSERT    1000        Description for 1000
    1400    "ORA-01400: cannot insert NULL into ("E668983_DBA"."DEST"."CODE")"        I    INSERT    10000        Description for 10000
    1400    "ORA-01400: cannot insert NULL into ("E668983_DBA"."DEST"."CODE")"        I    INSERT    1000        Description for 1000
    1400    "ORA-01400: cannot insert NULL into ("E668983_DBA"."DEST"."CODE")"        I    INSERT    10000        Description for 10000

  • Update Global Temp Table in Oracle 11g

    Hi Experts,
    Scenario: I have stored  procedure A which calls procedure B. Procedure B uses Global temp Tables(With On Commit Preserve Rows)  to work with the data.
    I am trying to update one of the GTT in Proc B but unable to do it .. via SQL or via PL/SQL Cursor/Collection. There is no syntax nor logical error and the PL/SQL proc completes execution successfully but the rows are not getting updated. My Db version is Oralce 11g 11203.
    Update statement is something like this.
    Update <GTT>
    SET amount1 = amount1 *-1, amount2 = amount2 *-1
    where field1 = <value>
    and field2 in ( Select filed2 from <table1> );
    Any idea why would this update not work? Has anyone faced this issue in Oracle 11g??
    Appreciate your suggestions & thanks in Advance for your inputs.
    Cheers,
    MS

    Update statement is something like this.
    Update <GTT>
    SET amount1 = amount1 *-1, amount2 = amount2 *-1
    where field1 = <value>
    and field2 in ( Select filed2 from <table1> );
    Any idea why would this update not work?
    You already told us that it DOES work - no errors or exceptions.
    It is trivial to determine if that update will do anything - just turn it into a SELECT and see if any rows are ntselected:
    v_cnt INTEGER;
    SELECT COUNT(*) INTO v_cnt FROM  myGTT
    WHERE field1 = <value>
    AND field2 in (Select field2 from <tablee1>);
    Then take a look at the 'count' that you get.

  • Is it possible to load and read from an Oracle global temp table?

    Is there a way to call an Oracle database package to pre-load global temp tables in BIP? I am an Oracle Reports user but a newbie to BIP. In Oracle Reports, I use the before-reports trigger to execute a database package that will populate a temp table with data. Then, in Oracle Reports, I read the temp table as the report data source. In BIP, I cannot find the ‘before-reports trigger’ equalivant. Since all the complicated business logic is contained in package it would be helpful to bring in the loaded temp table into BIP. Any thoughts?
    Example:
    Step 1. In the Oracle Reports before report trigger : exec db_package.load_temp_table_procedure (:var1, :var2, :var3);
    Step 2: Select * from temp_table.

    Look at Datatemplates,
    It has pre and post report trigger,
    You can do all these stuff over there,
    Calling a package  in Data template

  • Global temp table in Oracle EBS

    hi gurus,
    i have a GTT with "ON COMMIT PRESERVE ROWS".
    i am populating this table through an OAF page and displaying the data.
    as per the documentation it should delete the data from the table once user logs out from the Oracle EBS but it's not happening.
    the user still sees the records from the previous session.
    please throw some light here.
    thanks,

    i was wondering if there is any sysadmin level setup/profile setup which can end the session (JDBC) once user logs out?No such profile option exists.
    Behavior of Global Temp Table in JDBC
    Behavior of Global Temp Table in JDBC
    Global temp tables with connection pooling
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4444273995237
    Make global temporary tables transaction specific
    http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:868691300346807468
    Thanks,
    Hussein

  • Error while creating Global temp table

    Hi,
    I am very new to PL/SQL so please excuse my question. I have the below query . I have to get a count between the source table and various target tables. I am creating a global temp table to store the counts. I am getting the below error for my following query :
    Thanks for the help,
    Petronas
    ----Query----
    set serveroutput on
    Declare
    nm1 varchar2(200);
    nm2 varchar2(200);
    cnt1 number;
    cnt2 number;
    diff number;
    totdiff number;
    Begin
    nm1 := null;
    nm2:= null;
    cnt1:= 0;
    cnt2 := 0;
    diff := 0;
    totdiff := 0;
    create GLOBAL TEMPORARY TABLE diff ( name1 varchar(200), name2 varchar2(200), diff number);
    select count(*) into cnt1
    from users_staging;
    select count(*) into cnt2
    from PROD.users;
    nm1 := 'users_staging';
    nm2 := 'PROD.users';
    diff := cnt1 - cnt2;
    insert into diff values (nm1,nm2,diff);
    select count(*) into totdiff
    from diff
    where diff> 0 ;
    dbms_output.enable(10000);
    dbms_output.put_line('# of tables where difference is > 0 ' ||totdiff);
    end;
    Encountered the symbol "CREATE" when expecting one of the following:
    begin case declare end exception exit for goto if loop mod
    null pragma raise return select update while with
    <an identifier> <a double-quoted delimited-identifier>
    <a bind variable> << close current delete fetch lock insert
    open rollback savepoint set sql execute commit forall merge
    pipe

    Hi,
    "CREATE GLOBAL TEPORARY TABLE ..." is not a PL/SQL command; it is a SQL command only.
    Create the table, using that statement, before running the PL/SQL block.
    You can issue SQL statements from within PL/SQL using the EXECUTE IMMEDIATE command, but this is rarely a good idea.
    I assume the PL/SQL code is meant to create the table and then populate it.
    You should split those into two separate pieces of code. You'll only want to create the table once, no matter how many times you use it. I assume you'll want to populate it the same way many times. Remember, the "TEMPORARY" in "GLOBAL TEMPORARY TABLE" refers to the data, not the table. When you end a transaction (or a session, depending on whther you want "ON COMMIT DELETE ROWS" or "ON COMMIT PRESERVE ROWS"), the data disappears, but the now-empty stays, ready to be populated for the next transaction (or session).
    Edited by: Frank Kulash on Aug 4, 2010 2:25 PM

  • Use of Oracle global temp table in BI Publisher

    Hi All,
    I have witten a function which populates a Gobal temp table.I call the function and do a select on the global temp table.This fails to give me any result.
    We are calling the function within the package in the 'beforeReport' trigger in our Data Template in BI Publisher.
    I tried to check the session id and found that the sessions are different when we execute the functiona and when we do a select query.
    How can I avoid this situation of changing session?
    I have tried by removing commit from the function but even thta didnt help.
    Please let me know if anyone has suugestion on this.
    Thanks in advance!

    Hi,
    To check if the function is working fine , we inserted the output from temp table into a normal physical table .We queried the physical table and found the values there.
    So , the function is working fine.
    We dont have any statement like 'PRAGMA AUTONOMOUS_TRANSACTION ' in our function.
    Do we need to add it?
    Just to clarify the issue , We have populated the temp table by calling a function and after that we are trying to query the temp table.However, it appears that the session changes between teh function call and issuing of select query .This is resultin into no data being fetched as the values in Gloabal temp table persist only for a session.
    Thanks!

  • Global temp tables difference in oracle 10g and 11g

    Hi All,
    we are planning to upgrade metasolv applications from 6.0.15 (currently suing 10g) to 6.2.1(currently using 11g).We are using the Global temp tables in 10g .i just want to know is there any impact if we upgrade the Global temp tables from 10g to 11g.if so can u please explain me clearly ?
    Please and thanks.

    FAQ on new features: Re: 14. What's the difference between different versions of the database?
    This can be used as a reference for all your queries..

  • Global Temp Tables in a Stored Proc

    Hi All,
    I'm trying to create a procedure that creates some tables and then creates global temporoay tables. This runs fine in a scrupt but when I place it in a proc, it fails with the following error
    Error(172,10): PLS-00103: Encountered the symbol "TABLE" when expecting one of the following: := . ( @ % ;
    I'm using the code below to create the global temp tables but I don't think you can do this in a procedure????
    TRUNCATE TABLE TMP_table;
    DROP TABLE TMP_table;
    CREATE GLOBAL TEMPORARY TMP_table
    ON COMMIT PRESERVE ROWS
    AS SELECT
    Thanks for any help given

    Why are you trying to create a temporary table in a stored procedure?
    In Oracle, you almost certainly want to create the temporary table once at compile time just like any other table. The difference is that the data in a temporary table is local to the session.
    If you really wanted to execute DDL in a stored procedure, you'd need to use dynamic SQL. But it's almost always a bad idea to do so.
    Justin

  • Multiple users accessing the same data in a global temp table

    I have a global temp table (GTT) defined with 'on commit preserve rows'. This table is accessed via a web page using ASP.NET. The application was designed so that every one that accessed the web page could only see their data in the GTT.
    We have just realized that the GTT doesn't appear to be empty as new web users use the application. I believe it has something to do with how ASP is connecting to the database. I only see one entry in the V$SESSION view even when multiple users are using the web page. I believe this single V$SESSION entry is causing only one GTT to be available at a time. Each user is inserting into / selecting out of the same GTT and their results are wrong.
    I'm the back end Oracle developer at this place and I'm having difficulty translating this issue to the front end ASP team. When this web page is accessed, I need it to start a new session, not reuse an existing session. I want to keep the same connection, but just start a new session... Now I'm losing it.. Like I said, I'm the back end guy and all this web/connection/pooling front end stuff is magic to me.
    The GTT isn't going to work unless we get new sessions. How do we do this?
    Thanks!

    DGS wrote:
    I have a global temp table (GTT) defined with 'on commit preserve rows'. This table is accessed via a web page using ASP.NET. The application was designed so that every one that accessed the web page could only see their data in the GTT.
    We have just realized that the GTT doesn't appear to be empty as new web users use the application. I believe it has something to do with how ASP is connecting to the database. I only see one entry in the V$SESSION view even when multiple users are using the web page. I believe this single V$SESSION entry is causing only one GTT to be available at a time. Each user is inserting into / selecting out of the same GTT and their results are wrong.
    I'm the back end Oracle developer at this place and I'm having difficulty translating this issue to the front end ASP team. When this web page is accessed, I need it to start a new session, not reuse an existing session. I want to keep the same connection, but just start a new session... Now I'm losing it.. Like I said, I'm the back end guy and all this web/connection/pooling front end stuff is magic to me.
    The GTT isn't going to work unless we get new sessions. How do we do this?
    Thanks!You may want to try changing your GTT to 'ON COMMIT DELETE ROWS' and have the .Net app use a transaction object.
    We had a similar problem and I found help in the following thread:
    Re: Global temp table problem w/ODP?
    All the best.

  • Global Temp Table, always return  zero records

    I call the procedure which uses glbal temp Table, after executing the Proc which populates the Global temp table, i then run select query retrieve the result, but it alway return zero record. I am using transaction in order to avoid deletion of records in global temp table.
    whereas if i do the same thing in SQL navigator, it works
    Cn.ConnectionString = Constr
    Cn.Open()
    If FGC Is Nothing Then
    Multiple = True
    'Search by desc
    'packaging.pkg_msds.processavfg(null, ActiveInActive, BrandCode, Desc, Itemtype)
    SQL = "BEGIN packaging.pkg_msds.processavfg(null,'" & _
    ActiveInActive & "','" & _
    BrandCode & "','" & _
    Desc & "','" & _
    Itemtype & "'); end;"
    'Here it will return multiple FGC
    'need to combine them
    Else
    'search by FGC
    SQL = "BEGIN packaging.pkg_msds.processavfg('" & FGC & "','" & _
    ActiveInActive & "','" & _
    BrandCode & "',null,null); end;"
    'will alway return one FGC
    End If
    ' SQL = " DECLARE BEGIN rguo.pkg_msds.processAvedaFG('" & FGC & "'); end;"
    Stepp = 1
    Cmd.Connection = Cn
    Cmd.CommandType = Data.CommandType.Text
    Cmd.CommandText = SQL
    Dim Trans As System.Data.OracleClient.OracleTransaction
    Trans = Cn.BeginTransaction()
    Cmd.Transaction = Trans
    Dim Cnt As Integer
    Cnt = Cmd.ExecuteNonQuery
    'SQL = "SELECT rguo.pkg_msds.getPDSFGMass FROM dual"
    SQL = "select * from packaging.aveda_mass_XML"
    Cmd.CommandType = Data.CommandType.Text
    Cmd.CommandText = SQL
    Adp.SelectCommand = Cmd
    Stepp = 2
    Adp.Fill(Ds)
    If Ds.Tables(0).Rows.Count = 0 Then
    blError = True
    BlComposeXml = True
    Throw New Exception("No Record found for FGC(Finished Good Code=)" & FGC)
    End If
    'First Row, First Column contains Data as XML
    Stepp = 0
    Trans.Commit()

    Hi,
    This forum is for Oracle's Data Provider and you're using Microsoft's, but I was curious so I went ahead and tried it. It works fine for me. Here's the complete code I used, could you point out what are you doing differently?
    Cheers,
    Greg
    create global temporary table abc_tab(col1 varchar2(10));
    create or replace procedure ins_abc_tab(v1 varchar2) as
    begin
    insert into abc_tab values(v1);
    end;
    using System;
    using System.Data;
    using System.Data.OracleClient;
    class Program
        static void Main(string[] args)
            OracleConnection con = new OracleConnection("data source=orcl;user id=scott;password=tiger");
            con.Open();
            OracleTransaction txn = con.BeginTransaction();
            OracleCommand cmd = new OracleCommand("begin ins_abc_tab('foo');end;", con);
            cmd.Transaction = txn;
            cmd.ExecuteNonQuery();
            cmd.CommandText = "select * from abc_tab";
            OracleDataAdapter da = new OracleDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            Console.WriteLine("rows found: {0}", ds.Tables[0].Rows.Count);
            // commit, cleanup, etc ommitted for clarity
    }

  • Global Temp Table or PL/SQL Table

    I am trying to determine if this can be done only using PL/SQL table. If not, will the usage of the global temp table affects the performance.
    Here is the situation,
    I have a data block that is based on a stored procedure. This stored procedure will return table of records from different database tables with join conditions. Some of the fields within the table of records will not have data returned from database tables. They will be the fields displayed on the form and the data will be entered by user.
    For example:
    Records will look like:
    Id          (will be populated by procedure)
    Hist_avg     (will be populated by procedure)
    My_avg     (will be used as field on the form so that user can enter their own avg)
    Cheked     (will be populated by procedure)
    My questions are:
    1.     Is this doable in form using a data block based on PL/SQL table?
    2.     Will users be able to manipulate (update) the data that based on the PL/SQL table in the memory as they wish and invoke the procedure to update the underlying table when clicking on a button (Update Avg)?
    3.     What is the advantage of using PL/SQL table and global temp table from database and form point of views?
    Any info is appreciated.

    Hi there...
    Here is the Reference...
    http://asktom.oracle.com/pls/ask/f?p=4950:8:2939484874961025998::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:604830985638
    Best Regards...
    Muhammad Waseem Haroon

  • Global Temp Table Not found - SSIS

    I am facing below error while using global temp table in SSIS.
    [OLE DB Destination [78]] Error: SSIS Error Code DTS_E_OLEDBERROR.  An OLE DB error has occurred. Error code: 0x80040E37.
    An OLE DB record is available.  Source: "Microsoft SQL Server Native Client 10.0"  Hresult: 0x80040E37  Description: "Table/view either does not exist or contains errors.".
    [OLE DB Destination [78]] Error: Failed to open a fastload rowset for " ##AGENTDTLS". Check that the object exists in the database.
    [SSIS.Pipeline] Error: component "OLE DB Destination" (78) failed the pre-execute phase and returned error code 0xC0202040.
    1) For data connection manager - Retain same connection is set to True
    2) Data Flow task - Delay Validation is set to True
    3) Destination Task - Using Temp Table - ValidateExternalMetadata is set to false.
    4) I am just using one data connection.
    5) before using the temp file I am checking if its exits and if yes drp it first and create it.
    Not able to understand the reason for failure.

    Why don't you use permanent table in tempdb?
    Kalman Toth Database & OLAP Architect
    SQL Server 2014 Design & Programming
    New Book / Kindle: Exam 70-461 Bootcamp: Querying Microsoft SQL Server 2012

  • Global temp table problem w/ODP?

    I'm using the current version of the ODP .NET data adapter to access a global temporary table on an Oracle
    9.2.0.4.0 server created with -
    CREATE GLOBAL TEMPORARY TABLE euik_dex_open_tasks_temp1
    (resource_id NUMBER,
    task_assignment_id NUMBER,
    task_id NUMBER,
    incident_id NUMBER,
    customer_product_id NUMBER,
    inventory_item_id NUMBER,
    contract_service_id NUMBER)
    ON COMMIT DELETE ROWS
    (See below for what is returned from the data dictionary for this table)
    If I use SQLPlus to insert a row into this table, then query the table immediately, I see the inserted row.
    If I use the same exact SQL through the ODP adapter, the ExecuteNonQuery statement returns the fact the 1 row was inserted. However, doing a SELECT from the table immediately after the INSERT, no rows are returned. See the .NET test ap, below.
    Also, note that if I use a global temp table made with ON COMMIT PRESERVE ROWS, the ODP adapter works fine.
    What am I doing wrong? Thanks in advance...
    Pat
    Private Sub TestTempTable()
    Dim Str1 As New System.Text.StringBuilder
    Dim Strx As New System.Text.StringBuilder
    Dim StrOut As New System.Text.StringBuilder
    Dim nInsert As Integer
    Dim nRow As Integer
    'Insert into the global temp table
    Str1.Append("INSERT INTO euik_dex_open_tasks_temp1(resource_id, " & vbCrLf)
    Str1.Append("      task_Assignment_id, " & vbCrLf)
    Str1.Append("     task_id, " & vbCrLf)
    Str1.Append("     incident_id, " & vbCrLf)
    Str1.Append("     customer_product_id, " & vbCrLf)
    Str1.Append("     inventory_item_id, " & vbCrLf)
    Str1.Append("     contract_service_id) " & vbCrLf)
    Str1.Append(" VALUES(1,2,3,4,5,6,7)" & vbCrLf)
    Dim cn As New Oracle.DataAccess.Client.OracleConnection
    Dim dr As Oracle.DataAccess.Client.OracleDataReader
    Dim cd As New Oracle.DataAccess.Client.OracleCommand
    Try
    cn.ConnectionString = "Data Source=XXX;User ID=mickey;Password=mouse;"
    cd.CommandType = CommandType.Text
    cd.Connection = cn
    cn.Open()
    'Run the query to load data in the temp table
    cd.CommandText = Str1.ToString()
    nInsert = cd.ExecuteNonQuery()
    MessageBox.Show(nInsert & " row(s) inserted.")
    'See if there are rows in the temp table
    Strx.Append("Select * from euik_dex_open_tasks_temp1")
    cd.CommandText = Strx.ToString()
    dr = cd.ExecuteReader
    nRow = 0
    While dr.Read
    StrOut.Append(dr(0) & vbCrLf)
    nRow = nRow + 1
    End While
    MessageBox.Show(nRow & " row(s) selected.")
    Catch ex As OracleClient.OracleException
    MessageBox.Show(ex.Message)
    Catch ex As Exception
    MessageBox.Show(ex.Message)
    Finally
    cn.Close()
    End Try
    End Sub
    OWNER     TABLE_NAME     TABLESPACE_NAME     CLUSTER_NAME     IOT_NAME     PCT_FREE     PCT_USED     
    INI_TRANS     MAX_TRANS     INITIAL_EXTENT     NEXT_EXTENT     MIN_EXTENTS     MAX_EXTENTS     PCT_INCREASE     
    FREELISTS     FREELIST_GROUPS     LOGGING     BACKED_UP     NUM_ROWS     BLOCKS     EMPTY_BLOCKS     AVG_SPACE     
    CHAIN_CNT     AVG_ROW_LEN     AVG_SPACE_FREELIST_BLOCKS     NUM_FREELIST_BLOCKS     DEGREE     INSTANCES     
    CACHE     TABLE_LOCK     SAMPLE_SIZE     LAST_ANALYZED     PARTITIONED     IOT_TYPE     TEMPORARY     
    SECONDARY     NESTED     BUFFER_POOL     ROW_MOVEMENT     GLOBAL_STATS     USER_STATS     DURATION     
    SKIP_CORRUPT     MONITORING     CLUSTER_OWNER     DEPENDENCIES     COMPRESSION
    APPS     EUIK_DEX_OPEN_TASKS_TEMP1                    10     40     1     255               
                   1     1     NO     N                                        
         1     1     N     ENABLED               NO          Y     N     NO     
    DEFAULT     DISABLED     NO     NO     SYS$TRANSACTION     DISABLED     NO          DISABLED     
    DISABLED

    Andrew,
    As David indicated if you do not wish to have "auto commit mode" you just need to use a transaction object to manually control the transaction.
    I'm just nervous at the idea of ODP.NET initiating interactions I am not aware of.I think it would be more fair to say "finishing interactions" in this case rather than "initiating interactions" but you could always just run a SQL trace from the database to see exactly what is happening if you are concerned.
    HTH,
    - Mark
    =======================================
    Mark A. Williams
    Oracle DBA
    Author, Professional .NET Oracle Programming
    http://www.apress.com/book/bookDisplay.html?bID=378

Maybe you are looking for

  • Unable to see master data changes

    I added a new field as an Attribute to Master Data (Customer Number) and loaded the data which was successfull. I created an infoset and created a report but am unable to see the values in this new field. I check 'Values in the Infoprovider' on the r

  • Cannot view streamed photos in web browser

    I have set up a photo stream from my iPhone and have set it up as a "Public Website" so that friends and family that do not have Apple devices can view the photos. Everything was working fine for about two months, but in the past couple of days peopl

  • Init 0 or shutdown -i0 on solaris 8 automatically reboots

    I have a solaris 8 server and when I issue init 0 or shutdown -i0 it automatically reboots. I was able to issue init 5 and it shutdown/power down, but not init 0. I looked at inittab and it shows s0:0:wait:/sbin/rc0 >/dev/msglog 2<>/dev/msglog </dev/

  • How do you expand a file system on Solaris 10 that is running as a LDOM on Solaris 11

    I'm somewhat new to Solaris but needing to expand an existing file system /work on our solaris 10 ldom that was P2V'd into a Solaris 11.2 environment.  I also have several additional questions that I can't seem to find an answer for anywhere. When tr

  • How do I implement smart print ?

    I need step by step on how to use smart print. Thanks