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 :掉存储过程的执行对象
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 存储过程 定义 和 优点 与 函数 区别
- oracle 存储过程和函数学习笔记
- oracle job 及存储过程案例
- oracle 函数中调用存储过程
- oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包
- oracle 创建表,序列,索引,视图,触发器,函数,存储过程,定时器,包体
- oracle函数和存储过程简单实例
- Oracle函数和存储过程
- 如何实现在Oracle中应用存储过程调用MatLab函数(3)
- IBatis调用ORACLE的存储过程、函数的返回结果集例子
- 第十一章 Oracle 函数与存储过程
- java下实现调用oracle的存储过程和函数
- MYSQL 存储过程和函数 案例 例子
- oracle中函数和存储过程的区别和联系
- oracle中的存储过程和函数的区别
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- Oracle 存储过程 定义 和 优点 与 函数 区别
- Oracle 大小写组合命名的表名、trigger名、存储过程名、函数名等删除方法
- oracle常用函数以及调用入参为record的存储过程的方法,
- java+oracle的存储过程开发案例(包含了oracle存储过程的通用分页方法、java的工厂类)