| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
Oracle 11g中PL/SQL新增了很多特性,在性能和易用性方面做了不少的提升,还有一些功能性的增强。 网管下载dl.bitscn.com
首先提一下函数的指定参数的调用。 网管有家www.bitscn.net
在11g以前,如果一个函数在SQL中被调用的话,那么不能通过指定参数的方式。如果一个函数有10个输入参数,前面9个都可以使用默认值,只有最后一个需要指定,在11g以前,如果函数在SQL中使用,那么必须把前面9个参数补齐。没有办法通过指定参数的方法调用。
| SQL> CREATE OR REPLACE FUNCTION F_TEST ( P1 IN NUMBER DEFAULT 0, P2 IN NUMBER DEFAULT 0, P3 IN NUMBER DEFAULT 0 ) RETURN NUMBER AS BEGIN RETURN 0; 中国网管论坛bbs.bitsCN.com END; / 函数已创建。 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 ---------------------------------------------------------------- 网管联盟bitsCN_com 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 ( P1 IN NUMBER DEFAULT 0, P2 IN NUMBER DEFAULT 0, P3 IN NUMBER DEFAULT 0 ) RETURN NUMBER AS BEGIN RETURN 0; END; / 网管联盟bitsCN@com 函数已创建。 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 网管论坛bbs_bitsCN_com -------------------------------------------------------------------------------- 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 V_RETURN NUMBER DEFAULT 1; BEGIN FOR I IN P_IN1..P_IN2 LOOP IF I = 0 THEN CONTINUE; END IF; V_RETURN := V_RETURN * I; END LOOP; RETURN V_RETURN; 网管u家bitscn.net END; / 函数已创建。 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 V_RETURN NUMBER DEFAULT 1; BEGIN FOR I IN P_IN1..P_IN2 LOOP CONTINUE WHEN I = 0; V_RETURN := V_RETURN * I; END LOOP; RETURN V_RETURN; END; 网管u家u.bitsCN.com / 函数已创建。 SQL> SELECT F_MULTI(-4, 2) FROM DUAL; F_MULTI(-4,2) ------------- 48 |
|
0
|
评论加载中…