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

创建存储过程

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

    • 声明类型不加大小!!!
相关推荐
TDengine (老段)6 分钟前
使用 StatsD 向 TDengine 写入
java·大数据·数据库·时序数据库·iot·tdengine·涛思数据
DarkAthena12 分钟前
【GaussDB】深度解析:创建存储过程卡死且无法Kill会话的疑难排查
数据库·gaussdb
Gauss松鼠会18 分钟前
GaussDB权限管理:从RBAC到精细化控制的企业级安全实践
大数据·数据库·安全·database·gaussdb
时序数据说25 分钟前
时序数据库IoTDB用户自定义函数(UDF)使用指南
大数据·数据库·物联网·开源·时序数据库·iotdb
Java初学者小白1 小时前
秋招Day15 - Redis - 缓存设计
java·数据库·redis·缓存
绅士玖2 小时前
前端数据存储总结:Cookie、localStorage、sessionStorage与IndexedDB的使用与区别
前端·javascript·数据库
倔强的石头1063 小时前
飞算JavaAI:重构软件开发范式的智能引擎
java·数据库·重构
Q_970956393 小时前
java+vue+SpringBoo足球社区管理系统(程序+数据库+报告+部署教程+答辩指导)
java·开发语言·数据库
行星0083 小时前
PostgreSQL大表创建分区实战
数据库·postgresql
isNotNullX3 小时前
什么是数据分析?常见方法全解析
大数据·数据库·数据仓库·人工智能·数据分析