「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」。
存储过程
存储过程:存储在数据库中供用户程序调用的程序叫存储过程(数据库中的程序)
1. 创建存储过程
用CREATE PROCEDURE命令建立存储过程
语法:
CREATE [OR REPLACE] PROCEDURE 过程名 [(参数名称1 in/out 参数类型1,参数名称2 in/out 参数类型2...)] AS
PLSQL子程序体(begin……end)
2. 形参声明
基本格式:参数名称 in/out 参数类型
- in类型为输入类型的参数,out类型为输出类型的参数
- 过程没有返回值,in类型的参数,只可以接收值,不能再给in类型的参数设置新的值
- 利用out参数在过程中实现返回多个值
- 声明接收参数的只声明类型,不声明大小
3. 实参声明
实参声明跟在as和begin之间即可,不需要declare关键字
4. 存储过程的调用
1.exec 过程名称[(参数1,参数2.....)]; PLSQL不支持这种调用
2.begin 过程名称[(参数1,参数2.....)] end;
5. 存储过程示例
1. 批量向学生表写入100条数据
CREATE OR REPLACE PROCEDURE student_batch_insert
AS
begin
for i in 1..100
loop
insert into t_student(id,name,sex,age)values(SEQ_STUDENT_ID.Nextval,'学生姓名',0,20);
end loop;
end;
2. 银行转账
create or replace procedure transfer(out_no in varchar2,in_no in varchar2,amont in number)
as
begin
*--1.* *从扣款方账户当中减掉要转账的金额*
update t_bank_no set bank_amont = bank_amont - amont where bank_no = out_no;
*--2.* *给收款方账户当中加要转账的金额*
update t_bank_no set bank_amont = bank_amont + amont where bank_no = in_no;
commit;*--* *提交*
end;
3. 银行转账的异常处理+事务
事务指的是:一系列操作,要么全部成功,要么全部失败。
create or replace procedure transfer(out_no in varchar2,in_no in varchar2,amont in number)
as
i number;
begin
*--1.* *从扣款方账户当中减掉要转账的金额*
update t_bank_no set bank_amont = bank_amont - amont where bank_no = out_no;
*--i := 10 / 0;*
*--2.* *给收款方账户当中加要转账的金额*
update t_bank_no set bank_amont = bank_amont + amont where bank_no = in_no;
commit;
exception
when others then
rollback;
end;