目录
1.是什么
-- 自定义函数,我们自己写的函数,可以通过函数名直接使用,存储函数也是函数,为了返回一个结果,必须有返回值。
2.语法
create [or replace] function 函数名 -- 只写类型 (参数名 参数类型,参数名 参数类型...) -- 只写类型,不写大小 return 结果变量数据类型 -- 只写类型,不写大小 is 变量声明部分; begin 逻辑部分; return 结果变量; [exception 异常处理部分] end;
3.例子
create or replace function fn_getAddressByID (addr_id number) -- 只写类型,不写大小 return varchar2 -- 只写类型,不写大小 is v_name varchar2(100); -- 这里要写大小 begin -- 根据参数,获取名字 select name into v_name from T_ADDRESS where id = add_id; -- 获取第二行字段名 return v_name; end; -- 使用存储函数 select fn_getAddressByID(12)from dual;
4.存储过程
-- 存储过程只是为了完成某个过程,没有返回值,但可以返回值。 -- 有传入(in),传出(out)参数,传出传入参数。
5.存储函数和存储过程的区别
-- 存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过传出参数返回多个值。 -- 存储函数可以在select 语句中直接使用,而存储过程不能。过程多数是在plsq!代码中直接使用的。在plsql代码外部使用 cal 存储过程名。 -- 存储函数一般都是封装一个查询结果,而存储过程一般都封装一段事务代码。
6.存储过程语法
create [or replace] procedure 存储过程名 -- 只写类型 (参数名 参数类型,参数名 参数类型...) -- 只写类型,不写大小 return 结果变量数据类型 -- 只写类型,不写大小 is|as 变量声明部分; begin 逻辑部分; return 结果变量; [exception 异常处理部分] end;
7.例子
-- 准备工作(t_owners有主键),创建序列 seq_owners 起始值100 生成主键值 create sequence seg_owners start with 100; -- 创建传入参数过程 create or replace procedure aaa -- 只写类型 (V_NAME varchar2, V_ADDRESSID number, V_HOUSENUMBER varchar2, V_WATERMETER varchar2, V_OWNERTYPEID number) -- 只写类型,不写大小 is begin -- 向t_owners插入数据 insert into C##WATERUSER.T_OWNERS values (seg_owners.nextVaL, V_NAME, V_ADDRESSID, V_HOUSENUMBER, V_WATERMETER,SYSdate, V_OWNERTYPEID); -- 提交数据 commit; end;