存储过程

  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;

你可能感兴趣的:(sql,idea)