存储函数 自定义函数(我们自己写的函数)
存储函数 为了给我们一个结果的
可以通过 select 函数名 直接使用
!!! 存储函数必须有返回值
存储函数必须有返回值
select 函数名
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;
创建存储函数
写参数的时候 参数名 参数类型(!!!只写类型 不写大小)
!!!只写类型 不写大小
plsql代码即可
存储一些 事物性操作 (把一个过程存储下来)
不需要返回值任何结果的(没有返回值)
可以返回值(传出参数)
返回多个返回值
参数比较多
传出参数 out
传入参数 in (什么也不加 默认就是 in)
传出传入参数
1、存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过传出参数返回多个值。
2、存储函数可以在select 语句中直接使用,而存储过程不能。过程多数是在plsql代码中直接使用的。在plsql代码外部使用 call 存储过程名.
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);
创建存储过程
声明类型不加大小!!!