建立本连接可见的的临时表我用的是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将截断表。
它有一個所謂的桌面數據庫(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将截断表。
解决方案 »
- REDHAT6.2下如何安装 oracle11g 64位?
- 问个exec执行sql的问题
- oracle开发书籍推荐
- 进程存储与存储过程的区别?
- 请教ORACLE的绝顶高手?一般开发者此贴不必看了!
- oracle登陆时的问题,请教高手!
- 用orapwd修改internal密码碰到问题,提示ORA-01031: insufficient privileges?
- 紧急求助,关于dbms_random.value
- 如何在oracle中建立一个可以odbc连接的数据源
- 关于oracle中Case 的使用方法??????????????急急急急急急急!!!!!!!!!!!!!
- oracle中字段如何inert进去一些特殊字符,例如#'"?%_等?
- oracle存储过程里如何创建一个临时表.
因为同一个临时表,不同的session之间只能看到自己的数据,直到session死亡.
却只在本session内可见,session结束后数据自然消失,所以你不用挖空心思非要建什么局部的临时表了
就需要建几百个表,其實几百个表對ORACLE來說是小意思,
隻是看你自己能否管理清楚了:)我知道樓主的意思,你想在每次用戶查詢完畢後就臨時表就不存在了,
但是這樣做的話時機無法把握,如果在報表顯示前drop臨時表則報表無法
顯示,如果在報表顯示後想drop表則存儲過程已經結束了,不能在這個
過程中drop這個表了!唯一的方法就是用在過程中用動態語句建立臨時表,在報表關閉的時候在用過程drop臨時表
但這樣不是很好控制,特別是並發處理的時候
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';
两个结构相同的表t1,t2 (a date, b varchar2(100), b number(18,2));
a是日期,b是客户名,c是金额;t1为收入表,t2为支出表。
统计报表格式为:
客户名,期初余额,本期收入,本期支出,期末余额
统计条件包括发生期间,客户名
我用了两个临时表才实现。但是在sql server 就很容易。
(等一等再给分)
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(+)期初余额,期末余额你是如何計算的