Oracle11新特性——PLSQL新特性(一)
打算寫一系列的文章介紹11g的新特性和變化。
11g中PL/SQL新增了很多特性,在效能和易用性方面做了不少的提升,還有一些功能性的增強。
這篇介紹一下PLSQL的函式指定引數呼叫和CONTINUE語句。
首先提一下函式的指定引數的呼叫。
在11g以前,如果一個函式在SQL中被呼叫的話,那麼不能透過指定引數的方式。如果一個函式有10個輸入引數,前面9個都可以使用預設值,只有最後一個需要指定,在11g以前,如果函式在SQL中使用,那麼必須把前面9個引數補齊。沒有辦法透過指定引數的方法呼叫。
SQL> CREATE OR REPLACE FUNCTION F_TEST
2 (
3 P1 IN NUMBER DEFAULT 0,
4 P2 IN NUMBER DEFAULT 0,
5 P3 IN NUMBER DEFAULT 0
6 ) RETURN NUMBER AS
7 BEGIN
8 RETURN 0;
9 END;
10 /
函式已建立。
SQL> SELECT F_TEST, F_TEST(1), F_TEST(1, 1), F_TEST(1, 1, 1) FROM DUAL;
F_TEST F_TEST(1) F_TEST(1,1) F_TEST(1,1,1)
---------- ---------- ----------- -------------
0 0 0 0
SQL> SELECT F_TEST(P3 => 1) FROM DUAL;
SELECT F_TEST(P3 => 1) FROM DUAL
*第 1 行出現錯誤:
ORA-00907: 缺失右括號
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
不過在11g中,這個限制不再存在,呼叫函式變得更加方便:
SQL> CONN YANGTK/yangtk@ORA11G已連線。
SQL> CREATE OR REPLACE FUNCTION F_TEST
2 (
3 P1 IN NUMBER DEFAULT 0,
4 P2 IN NUMBER DEFAULT 0,
5 P3 IN NUMBER DEFAULT 0
6 ) RETURN NUMBER AS
7 BEGIN
8 RETURN 0;
9 END;
10 /
函式已建立。
SQL> SELECT F_TEST(P3 => 1) FROM DUAL;
F_TEST(P3=>1)
-------------
0
SQL> SELECT F_TEST(P1 => 1, P2 => 2, P3 => 3) FROM DUAL;
F_TEST(P1=>1,P2=>2,P3=>3)
-------------------------
0
SQL> SELECT F_TEST(1, P3 => 3) FROM DUAL;
F_TEST(1,P3=>3)
---------------
0
SQL> SELECT * FROM V$VERSION;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Linux: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
Oracle另外增加的一個新功能是新增了CONINUE語句:
SQL> CREATE OR REPLACE FUNCTION F_MULTI (P_IN1 IN NUMBER, P_IN2 IN NUMBER) RETURN NUMBER AS
2 V_RETURN NUMBER DEFAULT 1;
3 BEGIN
4 FOR I IN P_IN1..P_IN2 LOOP
5 IF I = 0 THEN
6 CONTINUE;
7 END IF;
8 V_RETURN := V_RETURN * I;
9 END LOOP;
10 RETURN V_RETURN;
11 END;
12 /
函式已建立。
SQL> SELECT F_MULTI(-4, 2) FROM DUAL;
F_MULTI(-4,2)
-------------
48
這裡不用CONTINUE語句也很容易實現,不過用CONTINUE更加自然一些。
這裡除了可以使用CONTINUE語句,還可以利用CONTINUE WHEN語句:
SQL> CREATE OR REPLACE FUNCTION F_MULTI (P_IN1 IN NUMBER, P_IN2 IN NUMBER) RETURN NUMBER AS
2 V_RETURN NUMBER DEFAULT 1;
3 BEGIN
4 FOR I IN P_IN1..P_IN2 LOOP
5 CONTINUE WHEN I = 0;
6 V_RETURN := V_RETURN * I;
7 END LOOP;
8 RETURN V_RETURN;
9 END;
10 /
函式已建立。
SQL> SELECT F_MULTI(-4, 2) FROM DUAL;
F_MULTI(-4,2)
-------------
48
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69427/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle11新特性——PLSQL新特性(七)OracleSQL
- Oracle11新特性——PLSQL新特性(六)OracleSQL
- Oracle11新特性——PLSQL新特性(五)OracleSQL
- Oracle11新特性——PLSQL新特性(四)OracleSQL
- Oracle11新特性——PLSQL新特性(三)OracleSQL
- Oracle11新特性——PLSQL新特性(二)OracleSQL
- Oracle11新特性——PLSQL函式快取結果(一)OracleSQL函式快取
- Oracle11新特性——PLSQL函式快取結果(三)OracleSQL函式快取
- Oracle11新特性——PLSQL函式快取結果(二)OracleSQL函式快取
- Oracle11新特性——撤銷事務(一)Oracle
- Oracle11新特性——虛擬列Oracle
- Oracle11新特性——行列轉換語句(一)Oracle
- Oracle11新特性——分割槽功能增強(一)Oracle
- Oracle11新特性——虛擬列(二)Oracle
- Oracle11新特性——分割槽功能增強Oracle
- Oracle11新特性——撤銷事務(三)Oracle
- Oracle11新特性——撤銷事務(二)Oracle
- Oracle11新特性——備份恢復功能增強(一)Oracle
- Oracle11新特性——線上操作功能增強(一)Oracle
- Oracle11新特性——分割槽功能增強(五)Oracle
- Oracle11新特性——分割槽功能增強(四)Oracle
- Oracle11新特性——行列轉換語句(二)Oracle
- Oracle11新特性——分割槽功能增強(三)Oracle
- Oracle11新特性——分割槽功能增強(二)Oracle
- Oracle11新特性——備份恢復功能增強Oracle
- Oracle11新特性——SQL快取結果集(五)OracleSQL快取
- Oracle11新特性——SQL快取結果集(三)OracleSQL快取
- 新特性
- Oracle11新特性——備份恢復功能增強(六)Oracle
- Oracle11新特性——備份恢復功能增強(五)Oracle
- Oracle11新特性——備份恢復功能增強(四)Oracle
- Oracle11新特性——備份恢復功能增強(三)Oracle
- Oracle11新特性——備份恢復功能增強(二)Oracle
- Oracle11新特性——備份恢復功能增強(十)Oracle
- Oracle11新特性——備份恢復功能增強(九)Oracle
- Oracle11新特性——備份恢復功能增強(八)Oracle
- Oracle11新特性——備份恢復功能增強(七)Oracle
- Oracle11新特性——備份恢復功能增強(十一)Oracle