1.创建存储过程
基本格式:
Create or replace procedure procedure_name(参数表列)
Is(或者是as)
PL/SQL块
注解:
<1>replace表示若该存储过程已经存在,那么将它删除,用下面的语句重新创建存储过程。
<2>参数表列中要指出参数的类型(in,out,inout以及数据类型),多个参数之间通过逗号隔开
<3>in类型的参数:表示向存储过程传进数据,存储过程接收该数据。
<4>out类型的参数:表示存储过程的返回值。
<5>in out类型的参数:表示该变量可以向存储过程传入值也可以成为返回值的载体
<6>存储过程当然也可以不需要任何参数,这个时候参数表列为空
<7>若是存储过程中没有指定参数的类型,默认的类型是in类型
<8>参数的默认值紧跟在数据类型的后面
创建存储过程举例:
Create or replace procedure procedure_updatePerson(
Per_id in persom.id%type default 95001,per_age out person.age%type,per_sex in out person.sex%type)
)
as
declare
v_hello varchar2(20) :=”hello procedure”;
begin
update person
set sex=per_sex
where id=per_id;
select age into per_age
from person
where id=per_id;
end procedure;
/
2. 执行存储过程:
Set serveroutput on
VARIABLE
V_age person.age%type;
Begin
Execute procedure_updatePerson(95001,:v_age,”女”)
Dbms_output_print_line(v_age);
End;
/
3.存储过程的嵌套
举例:
Create or replace procedure leave_person(per_id in person.id%type)
As
Procedure log_exec
Is
Begin
Insert into log_table(user_id,log_date)
Values(user,sysdate);
End log_exec;
Begin
Delete
From person
Where id=per_id;
--调用存储过程,无参数
Log_exec;
End leave_person;
/
4 存储过程之间的调用
举例:
Create or replace procedure process_person
Is
Cursor person_cursor is
Select id
From person;
Begin
For per_rec in person_cursor loop
addage_procedure (per_rec.id);------调用另外一个存储过程
end loop;
commit;
end process_person;
/
create or replace procedure addage_procedure(per_id in person.id%type)
is
begin
update person
set age=age+1;
where id=per_id;
end addage_procedure;
/
5.删除存储过程
Drop procedure procedure_name;