首页 > 代码库 > PL/SQL之--函数

PL/SQL之--函数

一、函数

   函数是作为数据库对象存储在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;

PL/SQL之--函数