li
  当前位置:主页 > 性能优化 > 文章内容
li
Oracle11新特性——PLSQL新特性(一)
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:3  
本文章共1634字,分2页,当前第1页,快速翻页:
 

打算写一系列的文章介绍11g的新特性和变化。

11gPL/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)

www.ixdba.net


-------------------------
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;



阅读更多内容1 · 2 · 下一页>>


  上一篇: Oracle11新特性——PLSQL函数缓存...   下一篇: Oracle11新特性——PLSQL新特性(...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·Oracle11新特性——PLSQL函数缓存...
·Oracle11新特性——PLSQL函数缓存...
·Oracle11新特性——PLSQL函数缓存...
·Oracle11新特性——行列转换语句...
·Oracle11新特性——SQL缓存结果集...
·Oracle11新特性——行列转换语句...
·Oracle11新特性——SQL缓存结果集...
·Oracle11新特性——SQL缓存结果集...
·Oracle10g增加备份集的CATALOG
·Oracle11新特性——DATA GUARD打...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——在线操作功能...
·Oracle11新特性——在线操作功能...
·Oracle11新特性——在线操作功能...
·Oracle11新特性——在线操作功能...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接