好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Oracle PL / SQL 函数

FUNCTION是返回值的PL / SQL块或方法,因此它可以在赋值的右侧使用。这里是一个例子:

 
n_value := to_number('123.45'); 
 

由于FUNCTION返回一个值,因此也可以在SQL语句中使用它,如下例所示:

 
select to_number('1') from dual; 
 

 

创建函数

让我们创建一个无错的to_number()函数,而不是像在SELECT语句中那样尝试将varchar2转换为一个数字,而不是处理错误。

 CREATE OR REPLACE FUNCTION to_number_or_null ( aiv_number IN varchar2 ) 
return number is 
begin -- w  w w  .  ja  v  a 2s.  c om
    return to_number(aiv_number); 
exception 
    when OTHERS then return NULL; 
end to_number_or_null; 
/ 


select to_number_or_null ( '123') from dual; 

 

注意

用于创建函数的DDL语法如下:

 
CREATE [OR REPLACE] FUNCTION <function_name> [( 
<parameter_name_1> [IN] [OUT] <parameter_data_type_1>, 
<parameter_name_2> [IN] [OUT] <parameter_data_type_2>,... 
<parameter_name_N> [IN] [OUT] <parameter_data_type_N> )] 
RETURN <return_data_type> IS-- from www. j a v a  2s  . com
     --the declaration section 
BEGIN 
    -- the executable section 
    return <return_data_type>; 
EXCEPTION
    -- the exception-handling section 
END; 
/ 
 

其中<function_name>是FUNCTION的名称; <parameter_name>是要传递的参数的名称IN,OUT或INand OUT; <parameter_data_type>是相应参数的PL / SQL数据类型; <return_data_type>是FUNCTION完成执行时将返回的值的PL / SQL数据类型。

 

注意2

[] 关键字OR REPLACE周围的 括号表示它们是可选的。

参数的括号表示它们也是可选的。

除了添加数据定义语言(DDL)CREATE FUNCTION关键字,可选参数和RETURN子句之外,FUNCTION的块结构与匿名过程相同。

下面的代码试图在SELECT语句中使用这个无错的FUNCTION:

 
select to_number_or_null('A') from DUAL; 
 

它返回一个NULL值,因为字母A不是一个数字。

 
select to_number_or_null('234.56') from DUAL; 
 

 

实例2

以下代码创建一个to_date()函数。

 create or replace FUNCTION to_mmsddsyyyy_or_null ( aiv_date in varchar2 ) 
return date is 
begin --   w w w  . j a va  2 s . co m
    return to_date(aiv_date, 'MM/DD/YYYY'); 
exception 
    when OTHERS then 
    return NULL; 
end to_mmsddsyyyy_or_null; 
/ 

select to_mmsddsyyyy_or_null('A') from DUAL;  

 

以下PL / SQL块创建一个测试单元以测试该函数。

 
begin 
    sys.dbms_output.put_line(to_mmsddsyyyy_or_null('01/01/2000')); 
    sys.dbms_output.put_line(to_mmsddsyyyy_or_null('02/29/2000')); 
    sys.dbms_output.put_line(to_mmsddsyyyy_or_null('02/29/2001')); 
    sys.dbms_output.put_line(to_mmsddsyyyy_or_null('9/9/2016')); 
    sys.dbms_output.put_line(to_mmsddsyyyy_or_null('9/9/9999')); 
    sys.dbms_output.put_line(to_mmsddsyyyy_or_null('1/1/9999 BC')); 
end; 
/ 
 

查看更多关于Oracle PL / SQL 函数的详细内容...

  阅读:25次

上一篇

下一篇

第1节:Oracle PL / SQL CASE 语句    第2节:Oracle PL / SQL CHAR VARCHAR2    第3节:Oracle PL / SQL INTERVAL数据类型    第4节:Oracle PL / SQL loop循环    第5节:Oracle PL / SQL for loop循环    第6节:Oracle PL / SQL goto 语句    第7节:Oracle PL / SQL update更新数据    第8节:Oracle PL / SQL包    第9节:Oracle PL / SQL 存储过程    第10节:Oracle PL / SQL 函数    第11节:Oracle PL / SQL变量    第12节:Oracle PL / SQL变量范围    第13节:Oracle PL / SQL TIMESTAMP数据类型    第14节:Oracle PL / SQL 聚合函数大全    第15节:Oracle PL/SQL Views 视图    第16节:Oracle PL / SQL 表 table    第17节:Oracle PL/SQL Delete删除数据    第18节:Oracle PL/SQL Select 查询    第19节:Oracle PL/SQL 教程    第20节:Oracle PL / SQL注释    第21节:Oracle PL / SQL触发器Triggers    第22节:Oracle PL / SQL变量值    第23节:Oracle PL / SQL块结构    第24节:Oracle PL / SQL关联数组    第25节:Oracle PL / SQL文字    第26节:Oracle PL / SQL参数    第27节:Oracle PL / SQL运算符    第28节:Oracle PL/SQL NUMBER    第29节:Oracle PL/SQL if 语句    第30节:Oracle PL/SQL while循环    第31节:Oracle PL / SQL约束    第32节:Oracle PL / SQL 插入insert    第33节:Oracle PL / SQL数据类型    第34节:PL / SQL 分析函数大全