ORACLE自定义函数
2015-04-02 10:00
120 查看
用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如max(value)函数,其中,value被称为参数。函数参数有3种类型。
IN参数类型:表示输入给函数的参数。
OUT参数类型:表示参数在函数中被赋值,可以传给函数调用程序。
IN OUT参数类型:表示参数既可以传值也可以被赋值。
1.语法格式:
SQL语法方式创建的语法格式为:
说明:
function_name::用户定义的函数名。函数名必须符合标示符的定义规则,对其所有者来说,该名在数据库中是唯一的。
parameter:用户定义的参数。用户可以定义一个或多个参数。
mode:参数类型。
datatype:用户定义参数的数据类型。
return_type::用户返回值的数据类型。
函数返回scalar_expression表达式的值,function_body函数体由pl/sql语句构成。
2.实例代码:
实例一:
实例二:
调用:
实例三:
带out参数:
函数调用限制
1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数
2、SQL只能调用带有输入参数,不能带有输出,输入输出函数
3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)
4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句
IN参数类型:表示输入给函数的参数。
OUT参数类型:表示参数在函数中被赋值,可以传给函数调用程序。
IN OUT参数类型:表示参数既可以传值也可以被赋值。
1.语法格式:
SQL语法方式创建的语法格式为:
CREATE OR REPLACE FUNCTION function_name /*函数名称*/ ( Parameter_name1,mode1 datatype1, /*参数定义部分*/ Parameter_name2,mode2 datatype2, Parameter_name3,mode3 datatype3 … ) RETURN return_datatype /*定义返回值类型*/ IS/AS BEGIN Function_body /*函数体部分*/ RETURN scalar_expression /*返回语句*/ END function_name;
说明:
function_name::用户定义的函数名。函数名必须符合标示符的定义规则,对其所有者来说,该名在数据库中是唯一的。
parameter:用户定义的参数。用户可以定义一个或多个参数。
mode:参数类型。
datatype:用户定义参数的数据类型。
return_type::用户返回值的数据类型。
函数返回scalar_expression表达式的值,function_body函数体由pl/sql语句构成。
2.实例代码:
实例一:
CREATE OR REPLACE FUNCTION F_FORMATSXDATA(VI_VALUE IN VARCHAR2, VI_FORMSTR IN VARCHAR2) RETURN VARCHAR2 IS RESULT VARCHAR2(200); V_NUMBERTEMP NUMBER(11, 2); BEGIN IF VI_FORMSTR = '001' OR VI_FORMSTR = '003' OR VI_FORMSTR = '005' THEN RESULT := VI_VALUE; ELSIF VI_FORMSTR = '002' THEN RESULT := TO_CHAR(VI_VALUE, 'FM999999999990.00'); ELSIF VI_FORMSTR = '004' THEN V_NUMBERTEMP := TO_NUMBER(VI_VALUE, 'FM999999999990.0099') * 100; RESULT := TO_CHAR(V_NUMBERTEMP, 'FM999999999990.00'); END IF; RETURN(RESULT); END F_FORMATSXDATA;
实例二:
create or replace function Bas_count return number is count_bas number; begin select count(*) into count_bas from Bas_Company; return(count_bas); end Bas_count;
调用:
declare i number; begin i:=Bas_count(); dbms_output.enable; dbms_output.put_line(to_char(i)); end;
实例三:
create or replace function fun_hello return varchar2 is begin return '朋友,你好'; end; 调用: select fun_hello from dual;带in参数:
create or replace function get_sal(empname in varchar2) return number is Result number; begin select sal into Result from emp where ename=empname; return(Result); end get_sal; 执行: SQL> var sal number SQL> exec :sal:=get_sal('scott');
带out参数:
create or replace function get_info(e_name varchar2,job out varchar2) return number is Result number; begin select sal,job into Result,job from emp where ename=e_name; return(Result); end get_info; 执行: SQL> var job varchar2(20) SQL> var dname varchar2(20) SQL> exec :dname:=get_info('SCOTT',:job)带in out 参数:
create or replace function result(num1 number,num2 in out number) return number is v_result number(6); v_remainder number; begin v_result :=num1/num2; v_remainder :=mod(num1,num2); num2 :=v_remainder; return(v_result); Exception when zero_divide then raise_application_error(-20000,'不能除0'); end result; 执行: var result1 number; var result2 number; exec :result2:=30 exec :result1:=result(100,:result2)
函数调用限制
1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数
2、SQL只能调用带有输入参数,不能带有输出,输入输出函数
3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)
4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句
相关文章推荐
- Oracle自定义函数——f_henry_GetStringLength
- oracle自定义函数的执行时间
- Oracle自定义函数
- Oracle 自定义函数写法大全
- Oracle Function 自定义函数建立实例
- Hibernate 针对 Oracle 特有函数及自定义函数的实现办法
- Oracle自定义函数
- Oracle个别日期格式在SQL Server中的转换(自定义函数)
- ORACLE 自定义函数实例,已知2点坐标求直线距离
- Oracle之自定义函数
- Oracle不支持在select语句中调用自定义函数时使用自定义类型作参数?
- 使用ODAC调用ORACLE的自定义函数和存储过程
- 如何通过Hibernate调用oracle自定义函数
- 用Oracle用户自定义合计函数来提高代码重用性
- 查询oracle自定义函数的源码
- Hibernate 针对 Oracle 特有函数及自定义函数的实现办
- Oracle自定义函数
- ORACLE自定义合计函数
- OleDb执行Oracle带自定义函数的SQL深度历险
- oracle 自定义身份证15位转18位 函数