一直用的是函数与存储过程,触发器基本上没用。
    昨天试写了个instead of 触发器,报:缺少befer,after, insert of关键字的错误
    代码如下:create or replace trigger saleviewtr 
on saleview instead of insert    --出错的一行
declare 
    l_sale_id char(6);
begin
    select sale_id
      into l_sale_id
      from inserted;
    
    if substring(l_sale_id, 1, 3) = 'may' then
    begin
        insert into salemay
            select sale_id, sale_name, sale_qua
              from inserted;
    end;
    
    if substring(l_sale_id, 1, 3) = 'jun' then
    begin
        insert into salemay
            select sale_id, sale_name, sale_qua
              from inserted;
    end
    
    if substring(l_sale_id, 1, 3) = 'jul' then
    begin
        insert into salemay
            select sale_id, sale_name, sale_qua
              from inserted;
    end;
end;
       希望用过触发器的朋友帮忙解答下! 看其他地方还有错吗?
    比如说:from inserted 对吗?

解决方案 »

  1.   

    create trigger [触发器名]  on [视图名]  instead of insert  as  begin  --声明变量;  --从inserted表中查出所有列的数据,分别赋给声明好的变量;  --用上面的数据向第一张表插入数据  --用上面的数据向第二张表插入数据  end
    变量声明错误,不能用DECLARE
      

  2.   

    on saleview instead of insert
    写反了,先事件后ON基于的视图
    instead of insert on saleview
      

  3.   


    create or replace trigger saleviewtr 
     instead of insert on saleview  --修正
    --declare  --去掉declare
        l_sale_id char(6);
    begin
        select sale_id
          into l_sale_id
          from inserted;
        
        if substring(l_sale_id, 1, 3) = 'may' then
        begin
            insert into salemay
                select sale_id, sale_name, sale_qua
                  from inserted;
        end;
        
        if substring(l_sale_id, 1, 3) = 'jun' then
        begin
            insert into salemay
                select sale_id, sale_name, sale_qua
                  from inserted;
        end
        
        if substring(l_sale_id, 1, 3) = 'jul' then
        begin
            insert into salemay
                select sale_id, sale_name, sale_qua
                  from inserted;
        end;
    end;
       
      

  4.   

    instead of触发器具有以下限制:
    只适用于视图
    不能指定before和after
    不能在具有with check option选项的视图上建立
    必须包含for each rowcreate or replace trigger saleviewtr 
    instead of insert on saleview 
    declare 
        l_sale_id char(6);
    begin
        select sale_id
          into l_sale_id
          from inserted;
        
        if substring(l_sale_id, 1, 3) = 'may' then
        begin
            insert into salemay
                select sale_id, sale_name, sale_qua
                  from inserted;
        end;
        
        if substring(l_sale_id, 1, 3) = 'jun' then
        begin
            insert into salemay
                select sale_id, sale_name, sale_qua
                  from inserted;
        end
        
        if substring(l_sale_id, 1, 3) = 'jul' then
        begin
            insert into salemay
                select sale_id, sale_name, sale_qua
                  from inserted;
        end;
    end;
      

  5.   

    declare是可以用的,上面少了for each row
      

  6.   

    刚试了一下,然后可以不用for each row的,看来书上说的有错