欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库对象——序列,存储过程

程序员文章站 2022-06-02 13:09:30
...


序列

序列的创建、使用、删除

--序列的创建
create sequence seq_tem_user
start with 1
increment by 1  

--序列的使用
insert into tem_user values(seq_tem_user.nextval,'admin','123')

--序列的删除
drop sequence seq_tem_user;

练习:序列

--每一个序列只服务一张表
create sequence seq_tem_user
start with  1   --开始值为1
increment by 1 ; --每次增长1个,(步长,频次) 


--表创建的时候,序列被创建好了
select seq_tem_user.currval from dual

存储过程

存储过程概述

  • 预先存储好的SQL程序。
  • 保存在Oracle中。
  • 通过名称和参数执行。
  • 可带参数,也可返回结果。
  • 可包含数据操纵语句、变量、逻辑控制语句等。

优点:

  1. 执行速度更快
  2. 减少网络流通量

如何创建存储过程

定义存储过程语法:

create or replace procedure 存储过程名
( 参数1 in | out | in out 数据类型,
......
    参数2 in | out | in out 数据类型 )
AS
BEGIN
SQL语句
END

存储过程的参数:

  • 参数可选
  • 参数分为输入参数(in)、输出参数( out )

IN:当调用存储过程的时候,该模式的形参接收对应实参的值,并且该形参是只读的,即不能被修改。如果在创建存储过程时没有指定参数的模式,则默认为IN。

OUT:在存储过程中,该形参被认为是只能写,即只能为其赋值。在存储过程中不能读它的值。返回时,将该形参值传给相应的实参。

IN OUT:该模式是前两种模式的合并。

存储过程的处理部分

一个PL/SQL块,该块包含定义部分、可执行部分以及异常处理部分,其中可执行部分是必须有的。

CREATE OR REPLACE 过程名
(
    --参数定义部分
)    
IS
    --局部变量定义部分
BEGIN
    --可执行部分
EXCEPTION
    --异常处理部分
END 过程名;

带有输入参数的存储过程

--创建带有参数的存储过程。
--参数数据类型不要加长度。
--参数类型不加 in or out 时,默认是 in 。 即输入参数。
--调用参数的存储过程,必须要传参。
create or replace procedure with_param_pro(str in VARCHAR2)
as
begin
  dbms_output.put_line(str);
end;

带有参数的存储过程运行:
set serveroutput on;
begin
  with_param_pro('测试数据');
end;

调用存储过程

方法一:
set serveroutput on;
begin
  with_param_pro(7654);
end;
方法二:
exec   with_param_pro(7654);
exec   with_param_pro(eno=>7788);

练习:存储过程之存储数据

create or replace procedure car_add_pro 
(type_name VARCHAR2,exhaust VARCHAR2,price number,create_date date)
as
begin
  insert into car values(car_seq.nextval, type_name, price, create_date, exhaust);
  COMMIT;
  dbms_output.put_line('数据存储成功');
EXCEPTION
  when OTHERS then dbms_output.put_line('数据存储失败');
END ;

练习:存储过程之通过编号查询员工姓名及工资

create or replace procedure emp_print_pro(eno emp.empno%type)
as
  emp_ emp%rowtype;
begin
  select * into emp_ from emp where empno=eno;
  dbms_output.put_line('员工的姓名是'||emp_.ename||',基本工资是'||emp_.sal);
end;

练习:存储过程的运行

set serveroutput on;
begin
  with_param_pro(emp.empno);
end;