oracle存储过程
简介
存储过程,它是一个有名字的plsql代码块
创建之后会保存到数据库中
当数据库启动时,会自动加载到数据库内存中,执行效率高
存储过程有参数,没有返回值,但是有输出参数
创建
存储过程的创建语法
create [or replace] procedure 存储过程名
[(形参 [in|out|in out] 数据类型,...)]
is|as
声明部分
begin
plsql代码块
exception
异常处理部分
end;
创建一个存储过程,打印10部门员工信息
create or replace procedure p
is
begin
for v in (select * from emp where deptno=10) loop
dbms_output.put_line(v.empno||' , '||v.ename||' , '||v.job||' , '||v.deptno);
end loop;
end;
调用
1在plsql代码块中调用
语法
存储过程名[(实参)];
begin
p();
end;
输出
9123 , june , , 10
7782 , CLARK , MANAGER , 10
7839 , KING , PRESIDENT , 10
7934 , MILLER , CLERK , 10
2使用call命令调用(sql命令)
语法
call 存储过程名(实参)
call p();
输出
9123 , june , , 10
7782 , CLARK , MANAGER , 10
7839 , KING , PRESIDENT , 10
7934 , MILLER , CLERK , 10
3使用exec命令调用(sqlplus命令)
语法
exec 存储过程名(实参)
SQL> set serveroutput on
SQL> exec p();
9123 , june , , 10
7782 , CLARK , MANAGER , 10
7839 , KING , PRESIDENT , 10
7934 , MILLER , CLERK , 10
PL/SQL 过程已成功完成。
传参
存储过程的参数
- 输入参数(in)
- 输出参数(out)
- 输入输出参数(in out)
传值方式
- 1传值
- 2传变量
- 3形参=>值
1,in参数
in参数:表示输入参数,可以使用任意一种传参方式
in参数实参的值只能被使用,不能被修改
创建一个存储过程,传入员工编号,打印员工信息
create or replace procedure p1(eno in emp.empno%type)
is
--声明一个变量,保存员工信息
v emp%rowtype;
begin
--根据员工编号查询员工信息
select * into v from emp where empno=eno;
--打印员工信息
dbms_output.put_line(v.empno||' , '||v.ename||' , '||v.job||' , '||v.deptno);
exception
when no_data_found then
dbms_output.put_line('员工不存在');
end;
调用
传值的方式调用p1
begin
p1(7369);
end;
输出
7369 , SMITH , CLERK , 20
传变量的方式调用
declare
empno number(4):=7499;
begin
p1(empno);
end;
输出
7499 , ALLEN , SALESMAN , 30
形参=>值的方式调用
begin
p1(eno=>7521);
end;
输出