当前位置: 首页 > 工具软件 > 11in1 > 使用案例 >

pl sql oracle11,Oracle11新特性——PLSQL新特性(一)

柴博
2023-12-01

打算写一系列的文章介绍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

 类似资料: