oracle 自定义函数
2016-09-09 10:11
274 查看
函数和存储过程类似,可以简单的理解为一段可以执行某个活动/动作的子程序,可以作为一个系统对象被存储在数据库中,可以重复调用。与存储过程不同的是,函数总是向调用者返回一个值,而存储过程不能有返回值。
函数的调用:
把函数作为PL/SQL中的表达式调用
例如:假如函数getID()可以返回值,可以这样调用:SELECT * FROM table WHERE id=getID()
创建一个变量用于接收函数的返回值
例如:VARIABLE id NUMBER;
EXECUTE :id := getID();
PRINT(id);
调用函数的位置:
l SELECT 语句的列表部分,eg: SELECT fun(..)….
l WHERE 或 HAVING 字句 eg:WHERE id=fun(…)…
l ORDER BY 、CONNECT BY、START WITH、GROUP BY 字句
l INSERT 语句的VALUES部分 INSERT INTO table VALUES(..,fun(),..)
l
4000
UPDATE 语句的SET部分 eg:UPDATE table SET name=fun(…)
l PL/SQL块
要让函数可以在SQL表达式中调用,必须满足以下条件:
1. 应该是stored function
2. 只接收IN参数
3. 传入参数和返回值都必须是SQL支持的类型,不能是PL/SQL中的特殊类型(例如boolean)
函数调用限制
1、SQL语句中只能调用存储函数(服务器端),而不能调用客户端的函数。
2、SQL只能调用带有输入参数,不能带有输出,输入输出函数。
3、SQL不能使用PL/SQL的特有数据类型(boolean,table,record等)。
4、SQL语句中调用的函数不能包含INSERT,UPDATE和DELETE语句。
CREATE [OR REPLACE] FUNCTION function_name [(argment [ { IN| IN OUT }] type, argment [ { IN | OUT | IN OUT } ] type] RETURN return_type { IS | AS } <类型.变量的说明> BEGIN FUNCTION_body EXCEPTION 异常处理语句 END; --IN:输入参数,向存储过程传递值,默认类型,可以不写 --OUT:输出参数,用于返回结果。 --IN OUT:作为IN参数向存储过程传递值,同时作为OUT参数返回值。 --REPLACE:指明若已有同名的存储过程存在,那么将被替换成当前创建的版本。 --RETURN只能返回单个值,不能返回多个值。 --可以使用DEFAULT关键字为输入参数指定默认值。
--没有参数的函数 create or replace function get_user return varchar2 is v_user varchar2(50); begin select username into v_user from user_users; return v_user; end get_user; --测试 方法一 select get_user from dual; 方法二 SQL> var v_name varchar2(50) SQL> exec :v_name:=get_user; PL/SQL 过程已成功完成。 SQL> print v_name V_NAME ------------------------------ TEST 方法三 SQL> exec dbms_output.put_line('当前数据库用户是:'||get_user); 当前数据库用户是:TEST PL/SQL 过程已成功完成
--带有IN参数的函数 create or replace function get_empname(v_id in number) return varchar2 as v_name varchar2(50); begin select name into v_name from employee where id = v_id; return v_name; exception when no_data_found then raise_application_error(-20001, '你输入的ID无效!'); end get_empname;
函数的调用:
把函数作为PL/SQL中的表达式调用
例如:假如函数getID()可以返回值,可以这样调用:SELECT * FROM table WHERE id=getID()
创建一个变量用于接收函数的返回值
例如:VARIABLE id NUMBER;
EXECUTE :id := getID();
PRINT(id);
调用函数的位置:
l SELECT 语句的列表部分,eg: SELECT fun(..)….
l WHERE 或 HAVING 字句 eg:WHERE id=fun(…)…
l ORDER BY 、CONNECT BY、START WITH、GROUP BY 字句
l INSERT 语句的VALUES部分 INSERT INTO table VALUES(..,fun(),..)
l
4000
UPDATE 语句的SET部分 eg:UPDATE table SET name=fun(…)
l PL/SQL块
要让函数可以在SQL表达式中调用,必须满足以下条件:
1. 应该是stored function
2. 只接收IN参数
3. 传入参数和返回值都必须是SQL支持的类型,不能是PL/SQL中的特殊类型(例如boolean)
函数调用限制
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位 函数