建立本连接可见的的临时表我用的是delphi中在的interbase來做的
它有一個所謂的桌面數據庫(DATABASE DESKTOP)
樓主可以查看相關的資料如果是後台建立會話級的臨時表,則其他session能看到表的存在
但無法看見當前session下臨時表中的數據在Oracle8i中,可以创建以下两种临时表: 
1。会话特有的临时表 
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> ) 
ON COMMIT PRESERVE ROWS; 2。事务特有的临时表 
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> ) 
ON COMMIT DELETE ROWS; 
CREATE GLOBAL TEMPORARY TABLE MyTempTable 
所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧。
下面两句话再贴一下: 
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行) 
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。

解决方案 »

  1.   

    不可以,也没有必要.
    因为同一个临时表,不同的session之间只能看到自己的数据,直到session死亡.
      

  2.   

    我不明白你为什么要这样做,你所创建的临时表虽然对所有的连接都是结构可见的,但临时表中的数据
    却只在本session内可见,session结束后数据自然消失,所以你不用挖空心思非要建什么局部的临时表了
      

  3.   

    "几百个存储过程统计报表"如果這几百个存储过程统计报表的結構都是不一樣的話,
    就需要建几百个表,其實几百个表對ORACLE來說是小意思,
    隻是看你自己能否管理清楚了:)我知道樓主的意思,你想在每次用戶查詢完畢後就臨時表就不存在了,
    但是這樣做的話時機無法把握,如果在報表顯示前drop臨時表則報表無法
    顯示,如果在報表顯示後想drop表則存儲過程已經結束了,不能在這個
    過程中drop這個表了!唯一的方法就是用在過程中用動態語句建立臨時表,在報表關閉的時候在用過程drop臨時表
    但這樣不是很好控制,特別是並發處理的時候
      

  4.   

    这个思路来自mssql和sybase的临时表,看来只能用ora的思路作ora的事了,只有适应了。再请教包兄:我先在drop不掉临时表了,提示正在使用,但是我把所有的会话都关闭了。怎样查看谁在占用和如何用语句干掉占用的会话。谢谢
      

  5.   

    --查詢
    SELECT DISTINCT A.*,B.OBJECT_NAME,D.TYPE,C.USERNAME,C.STATUS,C.LOCKWAIT,C.TERMINAL,C.PROGRAM
    FROM  V$LOCKED_OBJECT A, ALL_OBJECTS B, V$SESSION C, V$LOCK D
    WHERE A.OBJECT_ID=B.OBJECT_ID
    AND A.SESSION_ID=C.SID
    AND A.LOCKED_MODE=D.LMODE
    /
    --kill
    alter system kill session 'sid,serial#'
    --example:
    SQL> SELECT DISTINCT A.*,B.OBJECT_NAME,D.TYPE,C.USERNAME,C.STATUS,C.LOCKWAIT,C.TERMINAL,C.PROGRAM
      2  FROM  V$LOCKED_OBJECT A, ALL_OBJECTS B, V$SESSION C, V$LOCK D
      3  WHERE A.OBJECT_ID=B.OBJECT_ID
      4  AND A.SESSION_ID=C.SID
      5  AND A.LOCKED_MODE=D.LMODE
      6  /        XIDUSN    XIDSLOT     XIDSQN  OBJECT_ID SESSION_ID ORACLE_USERNAME                OS_USER_NAME                   PROCESS   LOCKED_MODE OBJECT_NAME          
    ---------- ---------- ---------- ---------- ---------- ------------------------------ ------------------------------ --------- ----------- ----------------
             0          0          0       4607        186 SYSADM                         YANGWANG                       1160:1300           3 DPCX_REQ_RECORD      
             0          0          0       4607        186 SYSADM                         YANGWANG                       1160:1300           3 DPCX_REQ_RECORD      
             0          0          0       6378         11 SYSADM                         b020069                        1520:1384           3 SHIP_RECONFIRM       
             0          0          0       6378         11 SYSADM                         b020069                        1520:1384           3 SHIP_RECONFIRM       
             0          0          0       6378        144 SYSADM                         Oscar                          1020:1404           3 SHIP_RECONFIRM       
             0          0          0       6378        144 SYSADM                         Oscar                          1020:1404           3 SHIP_RECONFIRM       
             0          0          0       6378        165 SYSADM                         kelvin                         51528:524           3 SHIP_RECONFIRM       
             0          0          0       6378        165 SYSADM                         kelvin                         51528:524           3 SHIP_RECONFIRM       選取object_name=your_table的SESSION_ID 
    ---------------------------------------------
    SQL> select * from v$session where sid = '186'
      2  /SADDR           SID    SERIAL#     AUDSID PADDR         USER#
    -------- ---------- ---------- ---------- -------- ----------
    1C2C8E5C        186      45374     877739 1C203008         24
    --------------------------------------------------------
    alter system kill session '186,45374';
      

  6.   

    我有一部份是试图的,但是试图只能有一个select语句,我的报表比较复杂,而且还有先对传入的参数先处理。举个比较简单的你看看怎么实现:
    两个结构相同的表t1,t2 (a date, b varchar2(100), b number(18,2)); 
    a是日期,b是客户名,c是金额;t1为收入表,t2为支出表。
    统计报表格式为:
    客户名,期初余额,本期收入,本期支出,期末余额
    统计条件包括发生期间,客户名
    我用了两个临时表才实现。但是在sql server 就很容易。
    (等一等再给分)
      

  7.   

    等一等再给分,呵呵,不是很重要select m.b,m.this_in,m.this_out
    from  (
           select t1.b,sum(t1.c) this_in
           from   t1
           where  t1.a>=begin_date
           and    t1.a<=end_date
          ) m,
          (
           select t2.b,sum(t2.c) this_out
           from   t2
           where  t2.a>=begin_date
           and    t2.a<=end_date
          ) n
    where m.b=n.b(+)期初余额,期末余额你是如何計算的