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