Oracle—PLSQL函数

一、存储函数

1、什么是存储函数

        在 Oracle 数据库中,存储函数(Stored Function)是一种用户自定义的数据库对象,它们类似于程序中的函数或方法,可以接受参数并返回一个值。存储函数通常用于执行特定的计算、数据转换或其他操作,并且可以在 SQL 查询、PL/SQL 块以及其他存储过程或函数中使用。存储函数在创建后存储在数据库中,并且可以在需要时被调用。它们可以访问数据库中的数据,并且可以执行各种计算、查询和其他操作。存储函数还可以使用 SQL 和 PL/SQL 语言的所有功能,包括条件语句、循环、异常处理等。

2、语法

CREATE [ OR REPLACE ]    FUNCTION    函数名称

(参数名称 参数类型, 参数名称 参数类型, ... )

RETURN 结果变量数据类型

IS

  变量声明部分;

BEGIN

  逻辑部分;

  RETURN 结果变量;

  [EXCEPTION

  异常处理部分]

END;

3、案例

-- todo 要求:
-- 创建函数 fn_num_ou()
-- 具有参数 num ==> 整数类型
-- 返回值 ret ==> 字符串类型
-- 功能: 如果参数num为偶数 返回值ret结果为 是
--      如果参数num为偶数 返回值ret结果为 不是
create or replace function fn_num_ou(num number)
return varchar2
is
 ret varchar2(30);
begin
    if mod(num,2)=0 then
        ret := '是';
        return ret;
    else
        ret := '不是';
        return ret;
    end if;
end;

select fn_num_ou('123') from dual;

二、存储过程

1、什么是存储过程

存储过程是被命名的 PL/SQL 块,存储于数据库中,是数据库对象的一种。

应用程序可以调用存储过程,执行相应的逻辑。

存储过程与存储函数都可以封装一定的业务逻辑并返回结果,存在区别如下:

1、存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过传出参数返回多个值。

2、存储函数可以在select 语句中直接使用,而存储过程不能。过程多数是被应用程序所调用。

3、存储函数一般都是封装一个查询结果,而存储过程一般都封装一段事务代码。

2、语法

CREATE [ OR REPLACE ]    PROCEDURE     存储过程名称

(参数名 类型, 参数名 类型, 参数名 类型)

IS|AS

变量声明部分;

BEGIN

逻辑部分

[EXCEPTION

异常处理部分]

END;

----------------------------------------------------

参数只指定类型,不指定长度

过程参数的三种模式:

IN   传入参数(默认)

OUT 传出参数,主要用于返回程序运行结果

IN OUT  传入传出参数

3、案例

3.1、存储过程(传入参数)

CREATE [OR REPLACE] PROCEDURE procedure_name

(parameter1 IN datatype1, parameter2 IN datatype2, ...)

IS

BEGIN

-- Procedure body

-- Perform actions using input parameters

END;

  • CREATE PROCEDURE 用于创建一个新的存储过程。
  • procedure_name 是存储过程的名称。
  • parameter1, parameter2, ... 是存储过程的传入参数,每个参数都有一个数据类型,并且带有 IN 关键字指示它们是输入参数。
  • ISBEGIN 之间的部分是存储过程的主体,其中包含了实际的逻辑和操作,可以使用传入参数进行计算和处理。
-- 创建删除指定id的pro_owners_del存储过程
-- 要求 t_owners表 传入参数
create or replace procedure pro_owners_del(v_id in number)
is
begin
    -- 根据v_id删除数据
    delete from T_OWNERS where id=v_id;
    -- 提交数据
    commit;
end;
--
call PRO_OWNERS_DEL(100);

3.2、存储过程(传出参数)

CREATE [OR REPLACE] PROCEDURE procedure_name

(parameter1 OUT datatype1, parameter2 OUT datatype2, ...)

IS

BEGIN

-- Procedure body

-- Assign values to output parameters

END;

  • 与传入参数相比,传出参数在参数列表中带有 OUT 关键字,指示它们是输出参数。
  • 在存储过程的主体中,你需要为传出参数赋值,以便在存储过程执行完成后返回结果。
-- 创建删除指定id的pro_owners_del_2存储过程
-- 要求
-- 1. t_owners表 传入参数v_id in, 传出参数v_name out 字符窜类型
-- 2. 调用pro_owners_del_2时 获取 删除的数据名称name 并显示出来
create or replace procedure pro_owners_del_2(v_id number, v_name out varchar2)
is
begin
    select name into v_name from T_OWNERS where id=v_id;
    delete from T_OWNERS where id=v_id;
    commit;
end;

declare
    v_name varchar2(30);
begin
    pro_owners_del_2(103,v_name);
    DBMS_OUTPUT.PUT_LINE(v_name);
end;

相关推荐

  1. 损失函数(目标函数

    2024-04-30 15:46:02       40 阅读
  2. 字符函数字符串函数

    2024-04-30 15:46:02       34 阅读
  3. Python函数——函数介绍

    2024-04-30 15:46:02       32 阅读
  4. linux | pause函数 、alarm函数、signal函数

    2024-04-30 15:46:02       35 阅读
  5. split函数

    2024-04-30 15:46:02       34 阅读
  6. CG 函数

    2024-04-30 15:46:02       40 阅读
  7. python函数

    2024-04-30 15:46:02       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-30 15:46:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-30 15:46:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-30 15:46:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-30 15:46:02       20 阅读

热门阅读

  1. mysql主从同步

    2024-04-30 15:46:02       8 阅读
  2. docker-compose 网络

    2024-04-30 15:46:02       11 阅读
  3. mySql 基础语法

    2024-04-30 15:46:02       10 阅读
  4. go语言获取变量类型的4种方式

    2024-04-30 15:46:02       11 阅读
  5. 【工作实践-11】关于uniapp切换账号登录失败问题

    2024-04-30 15:46:02       11 阅读
  6. milvus indexnode启动源码分析

    2024-04-30 15:46:02       12 阅读
  7. android中给view添加遮罩层

    2024-04-30 15:46:02       11 阅读
  8. leetcode_40.组合总和 II

    2024-04-30 15:46:02       13 阅读
  9. 什么是AI推理

    2024-04-30 15:46:02       11 阅读
  10. conda修改当前环境中的python版本

    2024-04-30 15:46:02       14 阅读
  11. 响应式布局插件

    2024-04-30 15:46:02       13 阅读
  12. 行列式求解

    2024-04-30 15:46:02       13 阅读