• Oracle 中的函数


    01-存储函数

    1-1 什么是存储函数

    • 存储函数 自定义函数(我们自己写的函数)

    • 存储函数 为了给我们一个结果的

    • 可以通过 select 函数名 直接使用

    • !!! 存储函数必须有返回值

    1-2 存储函数的特点

    • 存储函数必须有返回值

    • select 函数名

    1-3 语法

    CREATE [ OR REPLACE ]    FUNCTION    函数名称
    (参数名称 参数类型, 参数名称 参数类型, ... )
    RETURN 结果变量数据类型
    IS
      变量声明部分;
    BEGIN
      逻辑部分;
      RETURN 结果变量;
      [EXCEPTION
      异常处理部分]
    END;

    例如:

    -- 创建函数 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;
    • CREATE FUNCTION

      • 创建存储函数

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

      • 写参数的时候 参数名 参数类型(!!!只写类型 不写大小)

    • RETURN 结果变量数据类型

      • !!!只写类型 不写大小

    • is

      • plsql代码即可

    02-存储过程

    2-1 什么是存储过程

    • 存储一些 事物性操作 (把一个过程存储下来)

    • 不需要返回值任何结果的(没有返回值)

      • 可以返回值(传出参数)

      • 返回多个返回值

    • 参数比较多

      • 传出参数 out

      • 传入参数 in (什么也不加 默认就是 in)

      • 传出传入参数

    2-2 存储过程 和 存储函数的区别

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

    2、存储函数可以在select 语句中直接使用,而存储过程不能。过程多数是在plsql代码中直接使用的。在plsql代码外部使用 call 存储过程名.

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

    2-3 语法

    CREATE [ OR REPLACE ]    PROCEDURE     存储过程名称
    (参数名 类型, 参数名 类型, 参数名 类型)
    IS|AS
    变量声明部分;
    BEGIN
    逻辑部分
    [EXCEPTION
    异常处理部分]
    END;

    例子:

    -- todo 2.1 准备工作(t_owners有主键)  创建序列 seq_owners 起始值100 生成主键值
    create sequence seq_owners start with 100 increment by 1;
    -- todo 2.2 创建传入参数的存储过程 pro_owners_add 添加业主信息 create procedure
    --  注意!!!:参数只能写类型不能写大小
    create or replace procedure pro_owners_add(
    --  参数: v_name in, v_addressid in, v_housenumber in, v_watermeter in, v_ownertypeid in
        v_name varchar2,
        v_addressid number,
        v_housenumber varchar2,
        v_watermeter varchar2,
        -- ADDDATE 为插入时间 不需要用户设定 直接指定为 插入数据时间即可
        v_ownertypeid number
    )
    is
    begin
    -- todo 2.3 向t_owners插入数据
        insert into T_OWNERS
        values (seq_owners.nextval,
                v_name,
                v_addressid,
                v_housenumber,
                v_watermeter, sysdate, v_ownertypeid);
    -- todo 2.4 提交数据
        commit;
    end;
    -- todo 2.5 调用存储过程 添加业主信息 call 存储过程(... ...);
    call pro_owners_add('盘丝洞01',66,'66','66',66);

    CREATE PROCEDURE

    创建存储过程

    存储过程名称(参数名 类型, 参数名 类型, 参数名 类型

      • 声明类型不加大小!!!

  • 相关阅读:
    LLaMA2模型训练加速秘籍:700亿参数效率提升195%!
    常用正则表达式
    一、配置环境
    3.【openCV_imread()函数详解】
    【(C语言)数据结构奋斗100天】顺序表和链表
    如何保持注意力,高效学习
    循迹模式——红外循迹模块使用介绍
    vos3000外呼系统如何修改话机注册端口
    一文理解所有需求分析中的基本术语
    工业AI视觉检测优势显著,深眸科技为工业自动化发展注入更强动力
  • 原文地址:https://blog.csdn.net/m0_62008384/article/details/138167813