一、函数
函数是作为数据库对象存储在oracle数据库中,函数又被称为PL/SQL子程序。oracle处理使用系统提供的函数之外,用户还可以自己定义函数。函数通常被作为一个表达式来调用或存储过程的一个参数,具有返回值。通常用于返回特定的数据。 函数语法如下:
create or replace function 函数名称 (
参数名称 测试类型, 参数名称 测试类型 ) return 数据类型 is 自定义变量名 数据类型 begin 处理语句; return 自定义变量名; exception 异常处理语句; end;函数和存储过程类似,只是函数必须有返回值。
二、实例
1、没有参数的函数
create or replace function test return varchar2is begin return 'hello world';end test;-- 函数调用 begin dbms_output.put_line(test());end
2、有输入参数的函数
create or replace function get_name( v_id number) return varchar2is --is类似于declare v_name varchar2(50); begin select username into v_name from person where id = v_id; return v_name;end get_name;-- 函数调用 begin dbms_output.put_line(get_name(1));end;
3、有带输入和输出的函数
create or replace function get_perons_info( f_id number, f_age out number)return varchar2is v_name varchar2(50); --必须有声明长度begin select username, age into v_name, f_age from person where id = f_id; return v_name;end get_perons_info;-- 函数调用declare v_age number; v_name varchar2(255);begin v_name := get_perons_info(1, v_age ); dbms_output.put_line('name:'||v_name||' age:'||v_age);end;
4、带有输入输出参数的函数
create or replace function get_person_info2( f_id in out number )return varchar2is v_name varchar2(50);begin select username, age into v_name, f_id from person where id = f_id; return v_name;end get_person_info2;-- 函数调用 declare v_id number; v_name varchar2(50);begin v_id := 1; v_name := get_person_info2(v_id); dbms_output.put_line('name:'||v_name||' age:'||v_id );end;
5、函数返回游标
create or replace function get_person_all return sys_refcursoris p_cursor sys_refcursor;begin open p_cursor for select * from person; return p_cursor; exception when others then DBMS_OUTPUT.PUT_LINE('获取信息发生错误');end get_person_all; --函数调用declare c_cursor sys_refcursor; r_person person%rowtype;begin c_cursor := get_person_all(); --2、打开游标-- open c_cursor; --此处不需要显示地打开游标,因为调用存储过程的时候返回的游标已经打开了 --3、提取数据 loop fetch c_cursor into r_person; exit when c_cursor%notfound; -- 下面没有数据的时候,退出 dbms_output.put_line('id:'||r_person.id); dbms_output.put_line('username:'||r_person.username); dbms_output.put_line('age:'||r_person.age); end loop; end;
三、函数其他命令
重新编译函数
alter function 函数名称 compile;
删除函数
drop function 函数名称;
查看指定的函数
select * from dba_objects where object_name = '函数名称(字母大写)' and object_type ='FUNCTION';