Oracle数据库的应用,存储过程

197 阅读2分钟

「这是我参与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;