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

创建存储过程

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

    • 声明类型不加大小!!!
相关推荐
夜泉_ly3 小时前
MySQL -安装与初识
数据库·mysql
qq_529835354 小时前
对计算机中缓存的理解和使用Redis作为缓存
数据库·redis·缓存
月光水岸New6 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6756 小时前
数据库基础1
数据库
我爱松子鱼6 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo6 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser7 小时前
【SQL】多表查询案例
数据库·sql
Galeoto8 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)8 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231118 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql