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  
请问这个问题怎么解决oracletriggger

解决方案 »

  1.   

    楼主要解决什么问题?1.log_rows.....是什么玩意?2.oracle里面没有else if,只有elsif
      

  2.   

    3.endif  后面没有分号结束
      

  3.   

    一 “这里怎么设置影响的行数”,楼主想要表达的是什么意思?
    前面的for each row已经说明了是对每一行的
    二 else if修改为elsif
    三 endif后加分号(英文状态下)
      

  4.   

    log_rows的意思就是当执行更新(insert delete update)操作的时候,当影响多行的时候,就把影响的行数记录到另外一张表
      

  5.   

    但是我把log_rows去掉后还是会报相同的错
      

  6.   

    1. else if =>elsif
    2. endif =>end if;
      

  7.   

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