PL/SQL之--函数

一、函数

  函数是作为数据库对象存储在oracle数据库中,函数又被称为PL/SQL子程序。oracle处理使用系统提供的函数之外,用户还可以自己定义函数。函数通常被作为一个表达式来调用或存储过程的一个参数,具有返回值。通常用于返回特定的数据。 函数语法如下:

create or replace function 函数名称 (
  参数名称 测试类型,
  参数名称 测试类型
)
return 数据类型
is
自定义变量名 数据类型
begin
  处理语句;
  return 自定义变量名;
  exception
  异常处理语句;
end;

  函数和存储过程类似,只是函数必须有返回值。

二、实例

1、没有参数的函数

create or replace function test
return varchar2
is
begin
       return ‘hello world‘;
end test;
-- 函数调用
begin
   dbms_output.put_line(test());
end

2、有输入参数的函数

create or replace function get_name(
  v_id number
)
return varchar2
is --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 varchar2
is
    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 varchar2
is
    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_refcursor
is
    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‘;
时间: 2025-01-14 19:59:25

PL/SQL之--函数的相关文章

ORACLE PL/SQL 字符串函数、数学函数、日期函数

ORACLE PL/SQL 字符串函数.数学函数.日期函数 --[字符串函数] --字符串截取substr(字段名,起始点,个数) select Name,substr(Name,2,4),substr(Name,0,3),substr(Name,-2,3),substr(Name,-2,1) from t1; --字符串从前面取三个(0开始) select Name,substr(Name,0,3) from t1; --字符串从后面取三个 select Name,substr(Name,-3

Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt

PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 组函数 本文将讨论如何利用单行函数以及使用规则. SQL中的单行函数 SQL和PL/SQL中自带很多类型的函数,有字符.数字.日期.转换.和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数.这些函数均可用于SELECT,WHERE.ORDER BY等子句中,例如下面的例子中就包含了TO

oracle pl/sql split函数

在软件开发过程中程序员经常会遇到字符串的拼接和拆分工作. 以java开发为例: 前台传入字符串拼接形式的一个JSON数据,如:"1001,1002,1003",这可能代表了一组序号. 程序员需要将序号转名称后按照相同的格式输出,如:“张三.李四.王五”. Java程序员通用的做法是在service层将接收的"1001,1002,1003"拆分(使用java split函数),然后封装List,将List传递给DAO, 再传递给ORM持久层的xml调用sql执行,sq

PL/SQL自定义函数

从SQL表达式中调用函数的限制 为了从SQL表达式中调用函数,一个用户定义函数必须: 是存储函数 只接受IN函数 只接收有受的SQL数据类型,而不接受PL/SQL数据类型 返回数据类型为有效的SQL数据类型,而非PL/SQL特殊的类型 从SQL表达式中调用的函数不能包含DML语句 从在表T上的UPDATE/DELETE语句中调用的函数,函数内容不能包含在同一个表T上的DML 从在表T上的UPDATE或DELETE语句中调用的函数,函数内容不能查询同一个表 从SQL语句中调用的函数不能包含结束事物

PL/SQL 06 函数 function

--函数 create or replace function  函数名称(参数1 类型1,参数2 类型2,...)  return 数据类型as  变量.常量声明;begin  代码;end; create or replace function  fun_change_name(name varchar2)  return varchar2as  result varchar2(20);begin  result:=substr(name,2)||substr(name,1,1);  ret

PL/SQL编程—函数

SQL> select * from mytest; ID NAME PASSWD SALARY ----- -------------------- -------------------- -------------------------------------------------------------------------------- 1 gagaga 123 100 2 gaodingle!!!! 123 100 3 gagaga 123 100 SQL> SQL>

PL/SQL 存储函数和过程

--存储过程 1.不带参: create or replace procedure 存储过程名 as|is --说明部分 begin --执行的语句: end: 调用存储过程 1 execute 存储过程名 --exec 存储过程名 2 在另外的plsql语句中直接调用 begin 存储过程名: 存储过程名: 存储过程名: end: create or replace procedure p_dept as begin dbms_output.put_line('存储过程'); end; 2.带

PL/SQL编程(函数、包、变量)

1.认识PL/SQL的函数 2.创建包和包体,使用包 3.PL/SQL变量的类型 --1.认识PL/SQL的函数 --输入雇员姓名,返回年薪 create or replace function sp_func(spName varchar2) return number is yearSal number(7,2); begin select sal*12+nvl(comm,0)*12 into yearSal from emp where ename=spName; return yearS

(六)PL/SQL字符串

PL/SQL字符串实际上是一个可选的尺寸规格字符序列.字符可以是数字,字母,空白,特殊字符或全部的组合. PL/SQL提供了三种类型的字符串:  固定长度字符串:在这样的字符串,程序员指定的长度,同时声明该字符串.该字符串是右填充空格以达到指定的长度.  变长字符串:在这样的字符串,最大长度可达32,767,为字符串指定,并不需要填充.  字符大对象(CLOB) :这是可变长度的字符串,可以达到128兆兆字节. PL/ SQL字符串可以是变量或字面值.字符串文字被引号围在内部.例如:'This