现有两张表,table1和table2:如下:
create table table1
字段1            VARCHAR2(255),
字段2            VARCHAR2(255),
字段3            VARCHAR2(255),
字段4            VARCHAR2(255),
字段5            VARCHAR2(255)
)

create table table2
字段6            VARCHAR2(255),
字段7            VARCHAR2(255),
字段8            VARCHAR2(255),
字段9            VARCHAR2(255),
字段10           VARCHAR2(255)
)
现在我想创建一个触发器:当table1中的某些字段,如字段1,或字段2..发生改变,则触发table2中的字段也发生相应的变化,如table2中字段6的值变成1,table2中字段7变成2,等,这种触发器改如何编写,说明下,是Oracle数据库,小弟新手,,请高手指点,谢谢!

解决方案 »

  1.   


    --触发器简单,但是根据你的描述 你的 table1 和 table2 需要一个关联条件,假设关联条件为 字段5=字段10
    create or replace trigger table1_trigger
    after update on table1
    for each row
    begin
      update table2
         set 字段6=1,
             字段7=2
       where 字段10 := old.字段5; --这里的条件是假设的,你根据你自己的实际情况处理。
    end;
      

  2.   

    --建议你直接读下触发器的创建过程,就会了。
    例子:
    CREATE OR REPLACE TRIGGER `<databaseName>`.`<triggerName>`
      < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
      ON <tableName>
      FOR EACH ROW
      BEGIN
      --do something
      END
      

  3.   

    你好,如果我只是当table1中的某一个字段,而非任意字段,如字段3发生改变时才引发触发器,改如何修改,谢谢
      

  4.   

    CREATE OR REPLACE TRIGGER TG_SALARYMONTHINFO
      AFTER UPDATE ON T_SALARYAGENCYMONTHSALINFO
      FOR EACH ROW
    BEGIN
      UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE Bdgagency:= OLD.Bdgagency;
    END;如此代码编译时提示有编译错误,请问各位错误再哪?
      

  5.   

    应当是Bdgagency:= OLD.Bdgagency;有错误,不要那个冒号,带冒号是赋值用的,在SQL里不要带上它。其次你的这个逻辑有问题,在一下贴我详细说明。
      

  6.   

    BEGIN
    UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE Bdgagency:= OLD.Bdgagency;
    END;
    上面这段代码的逻辑是错误的,错误内容有两点:
    1. 不管bdgagency列是否有变化,都会将T_SALARY_SALARIESDATA.text1设为1
    2. 使用bdgagency列做为where条件,需要保证Bdgagency是表T_SALARY_SALARIESDATA的主键或者唯一索引。否则请使用主键做为where条件,以免更新了其它不应当更新的数据。-- 假设两表中都存在列R_ID,且该列为主键
    if ( OLD.Bdgagency <> NEW.Bdgagency) then
        UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE R_ID = OLD.R_ID;
    end if;
      

  7.   

    这么明显的错误,还+1!where col1 = :old.col1;
      

  8.   


    --触发器简单,但是根据你的描述 你的 table1 和 table2 需要一个关联条件,假设关联条件为 字段5=字段10
    create or replace trigger table1_trigger
    after update of 字段3 on table1
    for each row
    begin
      update table2
         set 字段6=1,
             字段7=2
       where 字段10 = :old.字段5; --这里的条件是假设的,你根据你自己的实际情况处理。
    end;
      

  9.   

    10楼时根据字段。。 of 字段名。。其他的都是update表的时候