溫馨提示×

溫馨提示×

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

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

Oracle 數(shù)據(jù)庫12c新特性總結(jié)(四)

發(fā)布時(shí)間:2020-08-07 19:13:47 來源:ITPUB博客 閱讀:181 作者:wg0411 欄目:關(guān)系型數(shù)據(jù)庫

【TechTarget中國原創(chuàng)】本文是Oracle數(shù)據(jù)庫12c新特性的系列文章的第四篇,作者將重點(diǎn)介紹一些對開發(fā)者而言非常有用的新特性。相關(guān)閱讀:Oracle 數(shù)據(jù)庫12c新特性總結(jié)(一)、Oracle 數(shù)據(jù)庫12c新特性總結(jié)(二)、Oracle 數(shù)據(jù)庫12c新特性總結(jié)(三)

第四部分包括:

  • 如何在子表包含數(shù)據(jù)的情況下截?cái)嘁粋€(gè)主表
  • 限制Top-N查詢結(jié)果的記錄
  • SQL*Plus的各種增強(qiáng)
  • 會話級序列
  • WITH語句的改善
  • 擴(kuò)展數(shù)據(jù)類型

截?cái)啾鞢ASCADE

在之前的版本中,在子表引用一個(gè)主表以及子表存在記錄的情況下,是不提供截?cái)啻酥鞅聿僮鞯?。而?2c中的帶有CASCADE操作的TRUNCATE TABLE可以截?cái)嘀鞅碇械挠涗洠⒆詣?dòng)對子表進(jìn)行遞歸截?cái)?,并作?strong>DELETE ON CASCADE服從外鍵引用。由于這是應(yīng)用到所有子表的,所以對遞歸層級的數(shù)量是沒有CAP的,可以是孫子表或是重孫子表等等。

這一增強(qiáng)擯棄了要在截?cái)嘁粋€(gè)主表之前先截?cái)嗨凶颖碛涗浀那疤?。新?strong>CASCADE語句同樣也可以應(yīng)用到表分區(qū)和子表分區(qū)等。


SQL> TRUNCATE TABLE CASCADE; 
SQL> TRUNCATE TABLE PARTITION CASCADE;


如果對于子表的外鍵沒有定義ON DELETE CASCADE 選項(xiàng),便會拋出一個(gè)ORA-14705錯(cuò)誤。

對Top-N查詢結(jié)果限制記錄

在之前的版本中有多種間接手段來對頂部或底部記錄獲取Top-N查詢結(jié)果。而在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的標(biāo)準(zhǔ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;


所有這些限制同樣可以很好的應(yīng)用于PL/SQL塊。


BEGIN 
SELECT sal BULK COLLECT INTO sal_v FROM EMP 
FETCH FIRST 100 ROWS ONLY; 
END;


對SQL*Plus的各種增強(qiáng)

SQL*Plus的隱式結(jié)果:12c中,在沒有實(shí)際綁定某個(gè)RefCursor的情況下,SQL*Plus從一個(gè)PL/SQL塊的一個(gè)隱式游標(biāo)返回結(jié)果。這一新的dbms_sql.return_result過程將會對PL/SQL 塊中由SELECT 語句查詢所指定的結(jié)果加以返回并進(jìn)行格式化。以下代碼對此用法進(jìn)行了描述:


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;


當(dāng)此過程得以執(zhí)行,會在SQL*Plus上返回格式化的記錄。

顯示不可見字段:在本系列文章的第一部分,我已經(jīng)對不可見字段的新特性做了相關(guān)闡述。當(dāng)字段定義為不可見時(shí),在描述表結(jié)構(gòu)時(shí)它們將不會顯示。然而,你可以通過在SQL*Plus提示符下進(jìn)行以下設(shè)置來顯示不可見字段的相關(guān)信息:


SQL> SET COLINVISIBLE ON|OFF


以上設(shè)置僅對DESCRIBE 命令有效。目前它還無法對不可見字段上的SELECT 語句結(jié)果產(chǎn)生效果。

會話級序列

在12c中現(xiàn)在可以創(chuàng)建新的會話級數(shù)據(jù)庫序列來支持會話級序列值。這些序列的類型在有會話級的全局臨時(shí)表上最為適用。

會話級序列會產(chǎn)生一個(gè)獨(dú)特范圍的值,這些值是限制在此會話內(nèi)的,而非超越此會話。一旦會話終止,會話序列的狀態(tài)也會消失。以下示例解釋了創(chuàng)建一個(gè)會話級序列:


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更快的運(yùn)行PL/SQL函數(shù)或過程,這些是由SQL語句的WITH語句加以定義和聲明的。以下示例演示了如何在WITH語句中定義和聲明一個(gè)過程或函數(shù):


WITH 
PROCEDURE|FUNCTION test1 (…) 
BEGIN 
END; 
SELECT FROM table_name; 
/


盡管你不能在PL/SQL單元直接使用WITH語句,但其可以在PL/SQL單元中通過一個(gè)動(dòng)態(tài)SQL加以引用。

擴(kuò)展數(shù)據(jù)類型

在12c中,與早期版本相比,諸如VARCHAR2, NAVARCHAR2以及 RAW這些數(shù)據(jù)類型的大小會從4K以及2K字節(jié)擴(kuò)展至32K字節(jié)。只要可能,擴(kuò)展字符的大小會降低對LOB數(shù)據(jù)類型的使用。為了啟用擴(kuò)展字符大小,你必須將MAX_STRING_SIZE的初始數(shù)據(jù)庫參數(shù)設(shè)置為EXTENDED

要使用擴(kuò)展字符類型需要執(zhí)行以下過程:

1. 關(guān)閉數(shù)據(jù)庫

2. 以升級模式重啟數(shù)據(jù)庫

3. 更改參數(shù): ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;

4. 執(zhí)行 utl32k.sql as sysdba : SQL> @?/rdbms/admin/utl32k.sql

5. 關(guān)閉數(shù)據(jù)庫

6. 以讀寫模式重啟數(shù)據(jù)庫

對比LOB數(shù)據(jù)類型,在ASSM表空間管理中,擴(kuò)展數(shù)據(jù)類型的字段以SecureFiles LOB加以存儲,而在非ASSM表空間管理中,它們則是以BasciFiles LOB進(jìn)行存儲的。

注意:一旦更改,你就不能再將設(shè)置改回STANDARD。



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


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI