您的位置:首页 > 数据库 > Oracle

oracle的存储过程和存储函数深入分析和案例

2017-10-26 21:09 302 查看
存储过程

1:概述:

存储过程是被命名的 PL/SQL 块,存储于数据库中,是数据库对象的一种。

应用程序可以调用存储过程,执行相应的逻辑。

2:存储过程与存储函数区别

存储过程与存储函数都可以封装一定的业务逻辑并返回结果,存在区别如
下:

1、 存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过

传出参数返回多个值。

2、 存储函数可以在 select 语句中直接使用,而存储过程不能。过程多数是

被应用程序所调用。

3、 存储函数一般都是封装一个查询结果,而存储过程一般都封装一段事务
代码。

3:应用场景

1用三大框架就用不到存储过程,存储过程是对业务逻辑的封装,业务逻辑层是写在数据库中,在控制层进行调用,存储过程的效率比框架效率更高

4:语法

CREATE [ OR REPLACE ] PROCEDURE 存储过程名称

(参数名 类型, 参数名 类型, 参数名 类型)

IS|AS

变量声明部分;

BEGIN

逻辑部分

[EXCEPTION

异常处理部分]

END;

参数只指定类型,不指定长度

过程参数的三种模式:

IN 传入参数(默认)

OUT 传出参数 ,主要用于返回程序运行结果

IN OUT 传入传出参数

5.案例一:创建不带传出参数的存储过程

--创建不带传出参数的存储过程,添加业主信息

create sequence seq_owners start with 11;

create or replace procedure pro_owners_add

(

--增加业主信息的存储过程

v_name varchar2,

v_addressid number,

v_housenumber varchar2,

v_watermeter varchar2,

v_type number

)

is

begin

--向业主表列属性赋值

insert into T_OWNERS

values( seq_owners.nextval,v_name,v_addressid,v_housenumber,v_watermeter,sysdate,v_type );

commit;

end;

--在pl/sql 中调用的存储过程 ,执行该语句将在表中添加数据

call pro_owners_add('幕衣名',1,'999-1','132-2',2);

drop sequence seq_owners 删除重复的序列

6.案例二:创建带传出参数的存储过程

--增加业主信息存储过程 --增加一个业主

create or replace procedure pro_owners_add

( --业主的列属性值

v_name varchar2,

v_addressid number,

v_housenumber varchar2,

v_watermeter varchar2,

v_type number,

v_id out number

)

is --函数过程没返回值,不用声明变量

begin

select seq_owners.nextval into v_id from dual; --执行SQL语句

insert into T_OWNERS --将定义的各个列属性值添加

values( v_id,v_name,v_addressid,v_housenumber,v_watermeter,sysdate,v_type);

commit; --数据插入后比较提交

end;

declare

v_id number;--定义传出参数的变量 ,output将打印出id值

begin

pro_owners_add('张凤',1,'922-4','2100',2,v_id); --进行赋值

DBMS_OUTPUT.put_line('增加成功,ID:'||v_id);

end;

注意:带传出参数的存储过程不能使用call,传出参数的存储过程是没return
callbleStatement :掉存储过程的执行对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle