“=》”關聯操作符在Oracle 10g和11g的變化差異
關聯操作符(=>)是我們在PL/SQL中經常使用到的一種引數指定操作符。藉助這個操作符,可以將原有的通過順序進行配比的引數匹配,變成可以顯示進行引數指定。
關聯操作符最開始是由PL/SQL中引入的語法特性,用來進行程式引數的指定。之後在11g中,這種特性開始融入到了SQL語句中。
10g環境下使用
首先,我們在10g上進行試驗。
//檢視版本資訊
SQL> select * from v$version where rownum<2;
BANNER
----------------------------------------------------------------
Oracle Database10gEnterpriseEdition Release10.2.0.1.0 – Prod
--PL/SQL指令碼
SQL> declare
2 i number;
3 begin
4 --PL/SQL Code
5 dbms_stats.gather_table_stats(ownname => 'SYS',tablename => 'T',cascade => true);
6 end;
7 /
PL/SQL procedure successfully completed
上面是一段PL/SQL指令碼,其中使用了=>操作符,進行儲存過程的引數顯示指定。一個儲存過程中,可以包括多個引數,這些引數可以都包括預設值選項。如果要進行呼叫,就必須按照定義儲存過程的順序進行引數顯示指定。
這種方式有一個很大的問題,就是預設引數的覆蓋。比如一個儲存過程中包括三個引數,都有預設值設定。在這種情況下,如果沒有關聯操作符,需要設定第三個引數的時候,就必須顯示的對前兩個引數進行指定。藉助關聯操作符,可以直接對第三個引數進行指定。
但是,這種功能只是限制在Oracle的PL/SQL語句中。如果要進行純SQL的操作,Oracle10g還不能夠支援。
--SQL語句中
SQL> explain plan for select count(*) from t where wner='SCOTT';
Explained
SQL>select * from table(dbms_xplan.display(table_name => 'plan_table',format => 'all'));
select * from table(dbms_xplan.display(table_name => 'plan_table',format => 'all'))
ORA-00907:缺失右括號
SQL> select * from table(dbms_xplan.display('plan_table',null,'all'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1232703844
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
(篇幅原因,有省略……)
在進行SQL語句中,只能通過順序指定引數的方式進行呼叫。這種方式很不方便,需要呼叫者熟悉所有引數的預設值,這個是不現實的。
Oracle11g下的改觀
進入Oracle11g之後,關聯操作符的使用變得更加廣泛。
SQL> select * from v$version where rownum<2;
BANNER
--------------------------------------------------------------------------------
Oracle Database11gEnterpriseEdition Release11.2.0.1.0 - Production
SQL> declare
2 i number;
3 begin
4 --PL/SQL Code
5 dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'T',cascade => true);
6
7 end;
8 /
PL/SQL procedure successfully completed
傳統的PL/SQL程式碼同樣支援。下面檢查SQL程式碼。
SQL> explain plan for select count(*) from t where wner='SCOTT';
Explained
SQL> select * from table(dbms_xplan.display(format => 'all'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1232703844
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 8 | 1 (0)| 00:00:01
| 1 | SORT AGGREGATE | | 1 | 8 | |
|* 2 | INDEXRANGESCAN| IDX_T_OWNER | 12 | 96 | 1 (0)| 00:00:01
--------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
使用=>操作符,可以讓我們的程式碼更加簡潔。只需要涉及到修改的引數進行指定既可以了。
結論:關聯操作符在Oracle10g下,只有PL/SQL可以使用。而進入11g之後,這個功能已經推進到SQL語句引擎中。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14710393/viewspace-751763/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- “=》”關聯運算子在Oracle 10g和11g的變化差異Oracle 10g
- Oracle中exists和in的效能差異Oracle
- 詳解Oracle 10g、11g和CHECKPOINT相關的初始化引數Oracle 10g
- 【原創】Oracle9i和10g中plan_table表的差異Oracle
- 關於在SQL語句中ON和WHERE中條件使用的差異SQL
- oracle 10g和11g下 CDC機制(change data capture) 變化資料捕捉Oracle 10gAPT
- 談談 mysql和oracle的使用感受 -- 差異MySqlOracle
- 空字串和空格字串在informix和oralce 的差異字串ORM
- 建表時的約束的語法在informix和oracle中的差異ORMOracle
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(五)筆記SQLOracle函式
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(三)筆記SQLOracle函式
- 《卸甲筆記》-PostgreSQL和Oracle的SQL差異分析之五:函式的差異(一)筆記SQLOracle函式
- 10g和9i執行計劃差異
- 異構資料庫的關聯查詢 oracle hsodbc 關聯mysql資料庫OracleMySql
- UDP和TCP的差異UDPTCP
- vue和react的差異VueReact
- PostgreSQL與Oracle的sql差異SQLOracle
- oracle和mysql關於關聯更新的一些差別以及ERROR 1093OracleMySqlError
- 深入sql多表差異化聯合查詢的問題詳解SQL
- ERP差異來源和差異處理
- 如何打造差異化和個性化的夜遊專案
- IaC 管理新思路:Walrus 和 Terraform 的差異化探索ORM
- Oracle 10g NLS 環境變數設定/和以前版本有變化Oracle 10g變數
- Oracle 10g/11g 統計資訊相關Oracle 10g
- Kotlin 操作符:run、with、let、also、apply 的差異與選擇KotlinAPP
- 在oracle 10g中實現oracle 11g的snapshot standby特性Oracle 10g
- Oracle的差異增量備份和累積增量備份Oracle
- 網路虛擬化、NFV和SDN之間的差異
- UNIX 和 WINDOWS2000 上的 ORACLE 的差異 (轉)WindowsOracle
- 資料變異性的度量 - 極差、IQR、方差和標準偏差
- 編碼導致 html和aspx 樣式差異,變形HTML
- typeof、instanceof與isPrototypeOf()的差異與聯絡
- MySQL和PostgreSQL在多表連線演算法上的差異MySql演算法
- BeanPostProcessor 介面和@PostConstruct 在使用姿勢上差異BeanStruct
- php關聯陣列和索引陣列差別PHP陣列索引
- 關於create database語句在10g,11g中的不同Database
- Oracle的差異增量備份和累積增量備份(zt)Oracle
- Gradle中的差異化構建Gradle