中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle 數據庫12c新特性總結(四)

發布時間:2020-08-07 19:13:47 來源:ITPUB博客 閱讀:190 作者:wg0411 欄目:關系型數據庫

【TechTarget中國原創】本文是Oracle數據庫12c新特性的系列文章的第四篇,作者將重點介紹一些對開發者而言非常有用的新特性。相關閱讀:Oracle 數據庫12c新特性總結(一)、Oracle 數據庫12c新特性總結(二)、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。



原文鏈接: http://www.searchdatabase.com.cn/showcontent_75994.htm


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

探索| 丹凤县| 镇沅| 边坝县| 岳阳县| 纳雍县| 将乐县| 延庆县| 镇原县| 长治市| 新蔡县| 陵川县| 南充市| 临泽县| 芷江| 阿鲁科尔沁旗| 和平县| 屏东县| 凤庆县| 察哈| 子洲县| 育儿| 定州市| 车致| 马关县| 湘乡市| 宁明县| 邵东县| 海伦市| 吉隆县| 琼海市| 深州市| 内乡县| 保德县| 四川省| 阿鲁科尔沁旗| 时尚| 古田县| 大新县| 吴忠市| 清远市|