oracle存储过程和触发器

--过程
创建过程,create procedure语句可以用于创建过程,简化语法如下:
create [or replace] procedure procedure_name
[(parameter_name [in|out|in out] type [,...])]
{is | as}
begin
  procedure_body
end parameter_name;

其中,or replace说明如果该过程已经存在,则用新的过程代替它。该选项可以用来修改一个现有过程;in|out|in out定义了参数的模式。in为默认的模式。type指定参数的类型。 procedure_body包含执行过程任务的sql和pl/sql语句。

--创建一个过程,给某个教师加工资
create or replace
procedure update_t_sal(t_tno in t.tno%type, t_num in number)
as
t_count_id integer;
begin 
  select count(*) into t_count_id from t 
  where t_tno=tno;
  if t_count_id = 1 then
    update t 
    set sal=sal+t_num
    where  t_tno=tno;
    commit;
  end if;
exception
  when others then
  rollback;
end update_t_sal;

--过程的调用
call update_t_sal('t1', 100);

--删除过程
drop procedure update_t_sal;

--触发器
触发器(trigger)是当特定的SQL DML语句,如insert,update或delete语句在特定的数据库表上运行时,由数据库自动运行(或者用技术来讲是自动激活)的过程。触发器对于实现表中某个列值的高级变更审计等功能非常有用。简化语法如下:
create [or replace] trigger trigger_name
{before|after|instead of} trigger_event
on table_name
[for each row [when trigger_condition]]
begin
  trigger_body
end trigger_name
其中,for each row指定触发器是一个行级触发器,即当触发器激活时,trigger_body中包含的代码会为每一行运行一次,如果for each row没有,则触发器是一个语句级触发器,即不管所作用的行有多少,当触发器激活时,trigger_body中包含的语句只运行一次。befor指定触发器在触发事件运行之前激活,after是定触发器在触发事件运行之后激活,instead of指定用触发器激活代替触发事件的运行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章