怎么样在select 语句中建立临时表,在线等待

jackie8008 2003-10-16 05:04:23
我打算从临时表里取一些字段,但是不知道怎么建立虚表,
...全文
271 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JCC0128 2003-10-17
  • 打赏
  • 举报
回复
分特,二十分,少了点
你从sql server转过来的吧,两种数据库的临时表不一样。sql server的临时表使用几乎没有限制。
而oracle对临时表要求十分严格,不充许滥用! 例如你在存储过程中操作临时表时,首先要求临时表存在,其次,还会检查你的sql 语句对临时表结构的操作是否有效,例,临时表四个字段,你插入数据时插三个,这时你的存储过程肯定通过不了编绎。


一.临时表基本概念

下面部分摘取csdn网友的内容
"臨時表的概念:
臨時表是那些只在事務處理或者會話進行期間存在數據的表,數據會在事務處理或者會話開始以後插入臨時表,當事務處理或會話完成之後就會刪除。
臨時表按照數據存在的方式分爲兩種

A. 針對事務處理的臨時表,即事務處理後就數據會刪除(如:DDL語句後,COMMIT後),定義的語法是:
CREATE GLOBAL TEMPORARY TABLE TRANSACTION_TAB ON COMMIT DELETE ROWS AS …(結果集)
B. 針對會話的臨時表,即會話完成之後才刪除數據,定義的語法是:
CREATE GLOBAL TEMPORARY TABLE TRANSACTION_TAB ON COMMIT PRESERVE ROWS AS …(結果集)
臨時表可以建立索引,視圖,觸發器(用來保證數據的完整性)等

本人理解的:
PRESERVE临时表与永久表的区别:
永久表在不同会话呈现相同的数据(不考虑事务处理),当所有事务完全提交时,不同应用程序看到的永久表 数据是完全相同。
而对于PRESERVE临时表,现在system创建此类型临时表temptbl ,用户a通过应用程序appa访问oracle,用户b通过应用程序appb访问oracle,
则a修改temptbl后,它的结果只在a中可见。此时b中的看到的temptbl不会随a修改temptbl而改变。
举例
temptbl只有一个字段a
运行两上sql /plus程序,分别简称为甲,已
甲中 insert temptbl values('11');
已中insert temptbl values ('da');
再在甲,已窗口中分别运行select * from temtbl 看到结果如下:
甲窗口
a
11

已窗口
a
da

也就是说创建一个PRESERVE临时表的话,实际在访问oracle的每个应用程序中都会存在一个此临时表,并且操作互不影响.


jiezhi 2003-10-16
  • 打赏
  • 举报
回复
select 语句中建立临时表是不形的。如上建立,就和使用固定表幾乎一樣的拉。
LGQDUCKY 2003-10-16
  • 打赏
  • 举报
回复
CREATE GLOBAL TEMPORARY TABLE admin_work_area
(startdate DATE,
enddate DATE,
class CHAR(20))
ON COMMIT DELETE ROWS;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧