日期:2014-05-17  浏览次数:20947 次

oracle触发器

create table my_emp as select empno,ename,sal, deptno from emp;

--完成一个触发器,用于记录对于my_emp表的操作信息
--将对用的insert delete update操作
--记录到一张日志表中update_logger(
--log_id number,              ID
--oparationType varchar2()     操作类型
--log_time date,                操作事件
--log_rows number)               影响行数

create table logger(
  log_id number primary key,
  oparationType varchar2(10),
  log_time date
  log_rows number(2)
)
//创建序列
create sequence log_id increment by 1 start with 1;

//创建触发器
create or replace trigger tri
after insert or update or delete
on my_emp
for each row
declare
   oparationType char(10);
//这里怎么设置影响的行数
  log_rows.....
begin
     if inserting then
       oparationType :='插入';
     else if updating then
       oparationType :='更新';
     else 
       oparationType :='删除';
     endif

       insert into logger values(log_id.nextval,oparationType,sysdate,log_rows);
end; 




LINE/COL ERROR
-------- ----------------------------------------------------------------
13/8     PLS-00103: 出现符号 "INSERT"在需要下列之一时:   := . ( @ % ;  符号 ";" 被替换为 "INSERT" 后继续。  
14/4     PLS-00103: 出现符号 ";"在需要下列之一时:   if  


请问这个问题怎么解决
oracle triggger

------解决方案--------------------
一 “这里怎么设置影响的行数”,楼主想要表达的是什么意思?
前面的for each row已经说明了是对每一行的
二 else if修改为elsif
三 endif后加分号(英文状态下)
------解决方案--------------------
引用:
log_rows的意思就是当执行更新(insert delete update)操作的时候,当影响多行的时候,就把影响的行数记录到另外一张表

记录影响的行数,在触发器里面记录是不太好实现的,因为每次触发一次,变量就会重新复制
可以用SQL%rowcount 游标属性来记录影响的行数