程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle中的臨時表、外部表和分區表

Oracle中的臨時表、外部表和分區表

編輯:Oracle教程

Oracle中的臨時表、外部表和分區表


Oracle中的臨時表、外部表和分區表

臨時表

在Oracle中,臨時表是“靜態”的,它與普通的數據表一樣只需要一次創建,其結構從創建到刪除的整個期間都是有效的。相對於其他類型的表,臨時表只有在用戶實際向表中添加數據時,才會為其分配空間,並且分配的空間來自臨時表空間。這就避免了與永久對象的數據爭用存儲空間。

創建臨時表的語法如下:

CREATE GLOBAL TEMPORARY TABLE table_name(
    column_name data_type,[column_name data_type,...]
)ON COMMIT DELETE|PRESERVE ROWS;

由於臨時表存儲的數據只在當前事務處理或者會話進行期間有效
因此,臨時表分為事務級臨時表會話級臨時表

事務級臨時表

創建事務級臨時表,需要使用ON COMMIT DELETE ROWS子句,事務級臨時表的記錄在每次提交事務後被自動刪除。

例1:

CREATE GLOBAL TEMPORARY TABLE tbl_user_transcation(
       ID NUMBER,
       uname VARCHAR2(10),
       usex VARCHAR2(2),
       ubirthday DATE
)
ON COMMIT DELETE ROWS;

會話級臨時表

創建會話級臨時表,需要使用ON COMMIT PRESERVE ROWS子句,會話級臨時表的記錄在用戶與服務器斷開連接後被自動刪除。

例2:

CREATE GLOBAL TEMPORARY TABLE tbl_user_session(
       ID NUMBER,
       uname VARCHAR2(10),
       usex VARCHAR2(2),
       ubirthday DATE
)
ON COMMIT PRESERVE ROWS;

操作臨時表

事務級臨時表插入一條數據但不COMMIT事務:

INSERT INTO tbl_user_transcation VALUES(1,'siege','M',TO_DATE('1991-02-28','YYYY-MM-DD'));
SELECT * FROM tbl_user_transcation;

此時,查詢結果如下:

1 siege M 28/02/1991

若進行了COMMIT,則此時表中無數據,說明Oracle已經將數據刪除了。

事務級臨時表插入一條數據:

INSERT INTO tbl_user_session VALUES(1,'siege','M',TO_DATE('1991-02-28','YYYY-MM-DD'));
SELECT * FROM tbl_user_session;
COMMIT;

此時即使提交了事務,tbl_user_session 中仍有數據。
此時當關閉session後(斷開數據庫連接),再連接數據庫,查詢時則無數據了。

注:在PL/SQL Developer默認配置為打開一個窗口,即重新建立一個session,因此要注意設置共享session,

外部表

外部表是Oracle提供的、可讀取操作系統的文件系統中存儲的數據的一種只讀表。外部表中的數據存儲在操作系統的文件系統中,只能讀,不能修改。

創建外部表

先以SYSDBA身份登錄,授予用戶相關權限:

  GRANT CREATE ANY DIRECTORY TO siege;

然後以用戶身份登錄創建目錄:

   CREATE DIRECTORY external_student AS 'D:\';

最後創建外部表:

例3:

CREATE TABLE tbl_external_student(
       sid         NUMBER ,
       sname   VARCHAR2(10),
       sclass    VARCHAR2(3),
       ssubject VARCHAR2(12),
       sscore    NUMBER
) ORGANIZATION EXTERNAL (
               TYPE oracle_loader
               DEFAULT DIRECTORY external_student
               ACCESS PARAMETERS(FIELDS TERMINATED BY ',')
               LOCATION ('student.csv')
   ) 

注:外部的D盤下的文件student.csv如下所示:

10001,siege,304,physics,80

查詢tbl_external_student與上述顯示一致。

分區表

在大型數據庫應用中,需要處理的數據量甚至可以達到TB級。為了提高讀寫和查詢速度,Oracle提供了一種分區技術,用戶可以在創建表時應用分區技術,將數據以分區形式保存。

分區是指將表或索引分隔成相對較小的、可獨立管理的部分。分區後的表與未分區的表在執行DML語句時沒有任何區別。

對表進行分區,必須為表中的每一條記錄指定所屬分區。一條記錄屬於哪一個分區是由分區表對該記錄的匹配字段決定的。分區字段可以是表中的一個字段或者多個字段的組合,在創建分區表時決定的。當用戶對分區表進行插入、更新或者刪除時,Oracle會自動根據分區字段的值來選擇存儲的分區。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved