Oracle 12c 新特性(四)
第四部分包括:
- 如何在子表包含資料的情況下截斷一個主表
- 限制Top-N查詢結果的記錄
- SQL*Plus的各種增強
- 會話級序列
- WITH語句的改善
- 擴充套件資料型別
截斷表CASCADE
在之前的版本中,在子表引用一個主表以及子表存在記錄的情況下,是不提供截斷此主表操作的。而在12c中的帶有CASCADE操作的TRUNCATE TABLE可以截斷主表中的記錄,並自動對子表進行遞迴截斷,並作為DELETE ON CASCADE服從外來鍵引用。由於這是應用到所有子表的,所以對遞迴層級的數量是沒有CAP的,可以是孫子表或是重孫子表等等。
這一增強擯棄了要在截斷一個主表之前先截斷所有子表記錄的前提。新的CASCADE語句同樣也可以應用到表分割槽和子表分割槽等。
SQL> TRUNCATE TABLE CASCADE; SQL> TRUNCATE TABLE PARTITION CASCADE; |
如果對於子表的外來鍵沒有定義ON DELETE CASCADE 選項,便會丟擲一個ORA-14705錯誤。
對Top-N查詢結果限制記錄
在之前的版本中有多種間接手段來對頂部或底部記錄獲取Top-N查詢結果。而在12c中,透過新的FETCH FIRST|NEXT|PERCENT語句簡化了這一過程並使其變得更為直接。為了從EMP表檢索排名前10的工資記錄,可以用以下新的SQL語句:
SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC FETCH FIRST 10 ROWS ONLY; |
以下示例獲取排名前N的所有相似的記錄。例如,如果第十行的工資值是5000,並且還有其他員工的工資符合排名前N的標準,那麼它們也同樣會由WITH TIES語句獲取。
SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC FETCH FIRST 10 ROWS ONLY WITH TIES; |
以下示例限制從EMP表中獲取排名前10%的記錄:
SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC FETCH FIRST 10 PERCENT ROWS ONLY; |
以下示例忽略前5條記錄並會顯示錶的下5條記錄:
SQL> SELECT eno,ename,sal FROM emp ORDER BY SAL DESC OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY; |
所有這些限制同樣可以很好的應用於PL/SQL塊。
BEGIN SELECT sal BULK COLLECT INTO sal_v FROM EMP FETCH FIRST 100 ROWS ONLY; END; |
對SQL*Plus的各種增強
SQL*Plus的隱式結果:12c中,在沒有實際繫結某個RefCursor的情況下,SQL*Plus從一個PL/SQL塊的一個隱式遊標返回結果。這一新的dbms_sql.return_result過程將會對PL/SQL 塊中由SELECT 語句查詢所指定的結果加以返回並進行格式化。以下程式碼對此用法進行了描述:
SQL> CREATE PROCEDURE mp1 res1 sys_refcursor; BEGIN open res1 for SELECT eno,ename,sal FROM emp; dbms_sql.return_result(res1); END; SQL> execute mp1; |
當此過程得以執行,會在SQL*Plus上返回格式化的記錄。
顯示不可見欄位:在本系列文章的第一部分,我已經對不可見欄位的新特性做了相關闡述。當欄位定義為不可見時,在描述表結構時它們將不會顯示。然而,你可以透過在SQL*Plus提示符下進行以下設定來顯示不可見欄位的相關資訊:
SQL> SET COLINVISIBLE ON|OFF |
以上設定僅對DESCRIBE 命令有效。目前它還無法對不可見欄位上的SELECT 語句結果產生效果。
會話級序列
在12c中現在可以建立新的會話級資料庫序列來支援會話級序列值。這些序列的型別在有會話級的全域性臨時表上最為適用。
會話級序列會產生一個獨特範圍的值,這些值是限制在此會話內的,而非超越此會話。一旦會話終止,會話序列的狀態也會消失。以下示例解釋了建立一個會話級序列:
SQL> CREATE SEQUENCE my_seq START WITH 1 INCREMENT BY 1 SESSION; SQL> ALTER SEQUENCE my_seq GLOBAL|SESSION; |
對於會話級序列,CACHE, NOCACHE, ORDER 或 NOORDER 語句會予以忽略。
WITH語句的改善
在12c中,你可以用SQL更快的執行PL/SQL函式或過程,這些是由SQL語句的WITH語句加以定義和宣告的。以下示例演示瞭如何在WITH語句中定義和宣告一個過程或函式:
WITH PROCEDURE|FUNCTION test1 (…) BEGIN END; SELECT FROM table_name; / |
儘管你不能在PL/SQL單元直接使用WITH語句,但其可以在PL/SQL單元中透過一個動態SQL加以引用。
擴充套件資料型別
在12c中,與早期版本相比,諸如VARCHAR2, NAVARCHAR2以及 RAW這些資料型別的大小會從4K以及2K位元組擴充套件至32K位元組。只要可能,擴充套件字元的大小會降低對LOB資料型別的使用。為了啟用擴充套件字元大小,你必須將MAX_STRING_SIZE的初始資料庫引數設定為EXTENDED。
要使用擴充套件字元型別需要執行以下過程:
1. 關閉資料庫
2. 以升級模式重啟資料庫
3. 更改引數: ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;
4. 執行 utl32k.sql as sysdba : SQL> @?/rdbms/admin/utl32k.sql
5. 關閉資料庫
6. 以讀寫模式重啟資料庫
對比LOB資料型別,在ASSM表空間管理中,擴充套件資料型別的欄位以SecureFiles LOB加以儲存,而在非ASSM表空間管理中,它們則是以BasciFiles LOB進行儲存的。
注意:一旦更改,你就不能再將設定改回STANDARD。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29337971/viewspace-1853943/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12c新特性Oracle
- Oracle 12c 新特性(三)Oracle
- Oracle 12c 新特性(二)Oracle
- Oracle 12c 新特性(一)Oracle
- Oracle11新特性——PLSQL新特性(四)OracleSQL
- Oracle 12C新特性-History命令Oracle
- Oracle 12c 兩個新特性Oracle
- Oracle 12C新特性In-MemoryOracle
- Oracle GoldenGate 12c 新特性OracleGo
- Oracle 12c新特性--ASMFD(ASM Filter Driver)特性OracleASMFilter
- Oracle 12c新特性之Sequence的Session特性OracleSession
- Oracle 12c DG新特性Far SyncOracle
- Oracle 12c 新特性之 temp undoOracle
- ORACLE 12C新特性——CDB與PDBOracle
- Oracle 12C新特性-RMAN恢復表Oracle
- Oracle 12C 新特性之級聯truncateOracle
- 12c新特性-Oracle Sharding簡介Oracle
- Oracle 12C 新特性之 恢復表Oracle
- Oracle 12c新特性 - Hybrid histogram 3OracleHistogram
- Oracle 12c新特性 - Hybrid histogram 2OracleHistogram
- Oracle 12c新特性 - Hybrid histogram 1OracleHistogram
- Oracle 12c新特性 - Top frequency histogram 3OracleHistogram
- Oracle 12c新特性 - Top frequency histogram 2OracleHistogram
- Oracle 12c新特性 - Top frequency histogram 1OracleHistogram
- Oracle 12c 新特性 Active Data Guard Far SyncOracle
- oracle 12c 新特性之不可見欄位Oracle
- oracle 12C 新特性之臨時undo控制Oracle
- Oracle 12C 資料泵新特性測試Oracle
- Oracle NET 12c 新特性 (文件 ID 2102464.1)Oracle
- 開發者必讀:Oracle 12c新特性再總結Oracle
- Oracle 資料庫12c新特性總結(一)Oracle資料庫
- Oracle 12c新特性 - Active Data Guard功能增強Oracle
- Oracle 12c 新特性 - 臨時表undo(TEMP UNDO)Oracle
- Oracle 12C新特性-資料泵新引數(LOGTIME)Oracle
- Oracle 12C新特性-資料泵新引數(VIEWS_AS_TABLES)OracleView
- 【12C】Oracle 12C 新特性“可插拔資料庫”功能體驗Oracle資料庫
- Oracle 12c新特性---Rapid Home Provisioning (RHP)OracleAPI
- Oracle 12c新特性之——TABLE ACCESS BY INDEX ROWID BATCHEDOracleIndexBAT