17 Oracle存储过程

存储过程

存储过程是被命名的 PL/SQL 块,存储于数据库中,是数据库对象的一种。 应用程序可以调用存储过程,执行相应的逻辑。
存储过程与存储函数都可以封装一定的业务逻辑并返回结果,存在区别如下:
1、存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过传出参数返回多个值。
2、存储函数可以在 select 语句中直接使用,而存储过程不能。过程多数是被应用程序所调用。
3、存储函数一般都是封装一个查询结果,而存储过程一般都封装一段事务代码。

存储过程语法结构

创建或修改存储过程的语法如下:

CREATE [ OR REPLACE ] PROCEDURE 存储过程名称
	(参数名 类型, 参数名 类型, 参数名 类型)
IS|AS
变量声明部分;
BEGIN
	逻辑部分
[EXCEPTION 
	异常处理部分]
END;

参数只指定类型,不指定长度
过程参数的三种模式:
IN 传入参数(默认)
OUT 传出参数 ,主要用于返回程序运行结果
IN OUT 传入传出参数

案例

1.创建不带传出参数的存储过程:添加业主信息

create sequence seq_owners start with 11; --业主序列

--创建不带传出参数的存储过程
create or replace procedure pro_owners_add(
    v_name varchar2, --名称
    v_address number, --地址编号
    v_housenumber varchar2, --门牌号
    v_watermeter varchar2, --水表号
    v_ownertypeid number --业主类型
)
    is

begin
    insert into t_owners
    values (seq_owners.nextval, v_name, v_addressid, v_housenumber, v_watermeter, sysdate, v_ownertypeid);
    commit;
end;

PL/SQL 中调用存储过程

call pro_owners_add('赵伟',1,'999-3','132-7',1);

或者:

begin
  pro_owners_add('马小哈',2,'22333','223344',1 );
end;

JDBC 调用存储过程:


try { 
	conn=BaseDao.getConnection(); stmt=conn.prepareCall("{call
pro_owners_add(?,?,?,?,?)}");
	stmt.setString(1, owners.getName()); 
	stmt.setLong(2, owners.getAddressid()); 
	stmt.setString(3, owners.getHousenumber()); 
	stmt.setString(4, owners.getWatermeter()); 
	stmt.setLong(5, owners.getOwnertypeid());
	stmt.execute();
}

2 创建带传出参数的存储过程
需求:添加业主信息,传出参数为新增业主的 ID

--创建带传出参数的存储过程
create or replace procedure pro_owners_add 
(
v_name varchar2,--名称
v_addressid number,--地址编号
v_housenumber varchar2,--门牌号
v_watermeter varchar2,--水表号
v_ownertypeid number,--业主类型
v_id out number
)
is

begin
  --对传出参数赋值
  select seq_owners.nextval into v_id from dual;
  --新增业主
  insert into t_owners 
         values( v_id,v_name,v_addressid,v_housenumber ,v_watermeter,sysdate,v_ownertypeid ); 
  commit;
  
end;

PL/SQL 调用该存储过程

declare
 v_id number;--定义传出参数的变量

 begin
 pro_owners_add('王旺旺',1,'922-3','133-7',1,v_id);
DBMS_OUTPUT.put_line('增加成功,ID:'||v_id); 

 end;

JDBC 调用存储过程:待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值