序列
序列的创建、使用、删除
--序列的创建
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中。
- 通过名称和参数执行。
- 可带参数,也可返回结果。
- 可包含数据操纵语句、变量、逻辑控制语句等。
优点:
- 执行速度更快
- 减少网络流通量
如何创建存储过程
定义存储过程语法:
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;