PL/SQL之--函数

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

一、函数

   函数是作为数据库对象存储在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';
目录
相关文章
|
2月前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
45 2
|
3月前
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
|
3月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
3月前
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
|
3月前
|
SQL 关系型数据库 MySQL
SQL日期函数
SQL日期函数
|
4月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
5月前
|
SQL 数据处理 数据库
|
5月前
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
116 0
|
5月前
|
SQL Oracle 关系型数据库
SQL 中的大小写处理函数详解
【8月更文挑战第31天】
237 0
|
5月前
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
77 0