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
创建存储过程
存储过程名称(参数名 类型, 参数名 类型, 参数名 类型
-
-
声明类型不加大小!!!
-