所需表  INFO_CHANGE_LOG  (公司改动日志表)
        T_BIZ_CORP_INFO  (公司表)
     就是当公司表的某一列有变动的时候就自动把这一列存入INFO_CHANGE_LOG表中 
   帮帮忙啊 大神们  急啊  
  谢谢!!!!!!!!!!!再谢!!!!!!

解决方案 »

  1.   

    这个貌似使用触发即可.相关资料参考如下:1.  Create an 'AFTER INSERT' Trigger   
    SQL> -- create demo table
    SQL> create table Employee(
      2    ID                 VARCHAR2(4 BYTE)         NOT NULL,
      3    First_Name         VARCHAR2(10 BYTE),
      4    Last_Name          VARCHAR2(10 BYTE),
      5    Start_Date         DATE,
      6    End_Date           DATE,
      7    Salary             Number(8,2),
      8    City               VARCHAR2(10 BYTE),
      9    Description        VARCHAR2(15 BYTE)
     10  )
     11  /Table created.SQL>
    SQL>
    SQL> --  AFTER INSERT Trigger
    SQL>
    SQL>
    SQL>     CREATE OR REPLACE TRIGGER employee_after_insert
      2      AFTER INSERT
      3          ON employee
      4          FOR EACH ROW
      5
      6      DECLARE
      7          v_username varchar2(10);
      8
      9      BEGIN
     10          -- Find username of person performing the INSERT into the table
     11          SELECT user INTO v_username
     12          FROM dual;
     13
     14          dbms_output.put_line('By: '||v_username);
     15          dbms_output.put_line(':new.id: '||:new.id);
     16          dbms_output.put_line(':new.first_name: '||:new.first_name);
     17          dbms_output.put_line(':new.last_name: '||:new.last_name);
     18          dbms_output.put_line(':old.id: '||:old.id);
     19          dbms_output.put_line(':old.first_name: '||:old.first_name);
     20          dbms_output.put_line(':old.last_name: '||:old.last_name);
     21      END;
     22      /Trigger created.SQL>
    SQL> -- prepare data
    SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2               values ('01','Jason',    'Martin',  to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto',  'Programmer')
      3  /
    By: JAVA2S
    :new.id: 01
    :new.first_name: Jason
    :new.last_name: Martin
    :old.id:
    :old.first_name:
    :old.last_name:1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('02','Alison',   'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester')
      3  /
    By: JAVA2S
    :new.id: 02
    :new.first_name: Alison
    :new.last_name: Mathews
    :old.id:
    :old.first_name:
    :old.last_name:1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('03','James',    'Smith',   to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester')
      3  /
    By: JAVA2S
    :new.id: 03
    :new.first_name: James
    :new.last_name: Smith
    :old.id:
    :old.first_name:
    :old.last_name:1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('04','Celia',    'Rice',    to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager')
      3  /
    By: JAVA2S
    :new.id: 04
    :new.first_name: Celia
    :new.last_name: Rice
    :old.id:
    :old.first_name:
    :old.last_name:1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('05','Robert',   'Black',   to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester')
      3  /
    By: JAVA2S
    :new.id: 05
    :new.first_name: Robert
    :new.last_name: Black
    :old.id:
    :old.first_name:
    :old.last_name:1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('06','Linda',    'Green',   to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York',  'Tester')
      3  /
    By: JAVA2S
    :new.id: 06
    :new.first_name: Linda
    :new.last_name: Green
    :old.id:
    :old.first_name:
    :old.last_name:1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('07','David',    'Larry',   to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York',  'Manager')
      3  /
    By: JAVA2S
    :new.id: 07
    :new.first_name: David
    :new.last_name: Larry
    :old.id:
    :old.first_name:
    :old.last_name:1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('08','James',    'Cat',     to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')
      3  /
    By: JAVA2S
    :new.id: 08
    :new.first_name: James
    :new.last_name: Cat
    :old.id:
    :old.first_name:
    :old.last_name:1 row created.SQL>
    SQL>
    SQL>
    SQL> -- display data in the table
    SQL> select * from Employee
      2  /ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
    ---- ---------- ---------- --------- --------- ---------- ---------- ---------------
    01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
    02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
    03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
    04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
    05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
    06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
    07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
    08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester8 rows selected.SQL>
    SQL>
    SQL>
    SQL> -- clean the table
    SQL> drop table Employee
      2  /Table dropped.SQL>
    SQL>
      

  2.   

    1.  Create an after delete trigger
    SQL> -- create demo table
    SQL> create table Employee(
      2    ID                 VARCHAR2(4 BYTE)         NOT NULL,
      3    First_Name         VARCHAR2(10 BYTE),
      4    Last_Name          VARCHAR2(10 BYTE),
      5    Start_Date         DATE,
      6    End_Date           DATE,
      7    Salary             Number(8,2),
      8    City               VARCHAR2(10 BYTE),
      9    Description        VARCHAR2(15 BYTE)
     10  )
     11  /Table created.SQL>
    SQL> create table employee_audit (
      2     id VARCHAR2(4 BYTE),
      3     salary Number(8,2),
      4     delete_date Date,
      5     deleted_by VARCHAR2(15 BYTE)
      6     )
      7  /Table created.SQL>
    SQL>
    SQL> -- prepare data
    SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2               values ('01','Jason',    'Martin',  to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto',  'Programmer')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('02','Alison',   'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('03','James',    'Smith',   to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('04','Celia',    'Rice',    to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('05','Robert',   'Black',   to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('06','Linda',    'Green',   to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York',  'Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('07','David',    'Larry',   to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York',  'Manager')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('08','James',    'Cat',     to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')
      3  /1 row created.SQL>
    SQL>
    SQL>
    SQL> -- display data in the table
    SQL> select * from Employee
      2  /ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
    ---- ---------- ---------- --------- --------- ---------- ---------- ---------------
    01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
    02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
    03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
    04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
    05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
    06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
    07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
    08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester8 rows selected.SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>     CREATE OR REPLACE TRIGGER employee_after_delete
      2      AFTER DELETE
      3          ON employee
      4          FOR EACH ROW
      5
      6      DECLARE
      7          v_username varchar2(10);
      8
      9      BEGIN
     10
     11          -- Find username of person performing the DELETE on the table
     12          SELECT user INTO v_username
     13          FROM dual;
     14
     15          -- Insert record into audit table
     16          INSERT INTO employee_audit (id, salary, delete_date, deleted_by)
     17                              VALUES ( :old.id, :old.salary, sysdate, v_username );
     18
     19      END;
     20      /Trigger created.SQL>
    SQL> delete from employee;8 rows deleted.SQL>
    SQL> select * from employee_audit;ID       SALARY DELETE_DA DELETED_BY
    ---- ---------- --------- ---------------
    01      1234.56 09-SEP-06 JAVA2S
    02      6661.78 09-SEP-06 JAVA2S
    03      6544.78 09-SEP-06 JAVA2S
    04      2344.78 09-SEP-06 JAVA2S
    05      2334.78 09-SEP-06 JAVA2S
    06      4322.78 09-SEP-06 JAVA2S
    07      7897.78 09-SEP-06 JAVA2S
    08      1232.78 09-SEP-06 JAVA2S8 rows selected.SQL>
    SQL> drop table employee_audit;Table dropped.SQL>
    SQL>
    SQL>
    SQL> -- clean the table
    SQL> drop table Employee
      2  /Table dropped.SQL>
    SQL>
      

  3.   

    1.  Simple AFTER update trigger   
    SQL> create table t( x int,
      2                  constraint t_pk primary key(x)
      3  );Table created.SQL>
    SQL>
    SQL> create trigger t_trigger AFTER update on T for each row
      2  begin
      3       dbms_output.put_line( 'Updated x=' || :old.x || ' to x=' || :new.x );
      4  end;
      5  /Trigger created.SQL>
    SQL> insert into t values ( 1 );1 row created.SQL> insert into t values ( 2 );1 row created.SQL>
    SQL> set serveroutput on
    SQL>
    SQL> update t set x = 2;
    Updated x=1 to x=2
    Updated x=2 to x=2
    update t set x = 2
    *
    ERROR at line 1:
    ORA-00001: unique constraint (JAVA2S.T_PK) violated
    SQL>
    SQL> update t set x = x+1;
    Updated x=1 to x=2
    Updated x=2 to x=32 rows updated.SQL>
    SQL>
    SQL> drop table t;Table dropped.SQL>
    SQL>
    SQL>2.  Create an after update trigger SQL> -- create demo table
    SQL> create table Employee(
      2    ID                 VARCHAR2(4 BYTE)         NOT NULL,
      3    First_Name         VARCHAR2(10 BYTE),
      4    Last_Name          VARCHAR2(10 BYTE),
      5    Start_Date         DATE,
      6    End_Date           DATE,
      7    Salary             Number(8,2),
      8    City               VARCHAR2(10 BYTE),
      9    Description        VARCHAR2(15 BYTE)
     10  )
     11  /Table created.SQL>
    SQL> -- prepare data
    SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2               values ('01','Jason',    'Martin',  to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto',  'Programmer')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('02','Alison',   'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('03','James',    'Smith',   to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('04','Celia',    'Rice',    to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary,  City,       Description)
      2                values('05','Robert',   'Black',   to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('06','Linda',    'Green',   to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York',  'Tester')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('07','David',    'Larry',   to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York',  'Manager')
      3  /1 row created.SQL> insert into Employee(ID,  First_Name, Last_Name, Start_Date,                     End_Date,                       Salary, City,        Description)
      2                values('08','James',    'Cat',     to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')
      3  /1 row created.SQL>
    SQL>
    SQL>
    SQL> -- display data in the table
    SQL> select * from Employee
      2  /ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
    ---- ---------- ---------- --------- --------- ---------- ---------- ---------------
    01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
    02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
    03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
    04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
    05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
    06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
    07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
    08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester8 rows selected.SQL>
    SQL>
    SQL> --after update trigger
    SQL>     CREATE OR REPLACE TRIGGER employee_after_update
      2      AFTER UPDATE
      3          ON employee
      4          FOR EACH ROW
      5
      6      DECLARE
      7          v_username varchar2(10);
      8
      9      BEGIN
     10
     11          -- Find username of person performing UPDATE into table
     12          SELECT user INTO v_username
     13          FROM dual;
     14
     15          dbms_output.put_line('By: '||v_username);
     16          dbms_output.put_line(':new.id: '||:new.id);
     17          dbms_output.put_line(':new.first_name: '||:new.first_name);
     18          dbms_output.put_line(':new.last_name: '||:new.last_name);
     19          dbms_output.put_line(':old.id: '||:old.id);
     20          dbms_output.put_line(':old.first_name: '||:old.first_name);
     21          dbms_output.put_line(':old.last_name: '||:old.last_name);
     22
     23      END;
     24      /Trigger created.SQL>
    SQL> update employee set first_name = 'new';
    By: JAVA2S
    :new.id: 01
    :new.first_name: new
    :new.last_name: Martin
    :old.id: 01
    :old.first_name: Jason
    :old.last_name: Martin
    By: JAVA2S
    :new.id: 02
    :new.first_name: new
    :new.last_name: Mathews
    :old.id: 02
    :old.first_name: Alison
    :old.last_name: Mathews
    By: JAVA2S
    :new.id: 03
    :new.first_name: new
    :new.last_name: Smith
    :old.id: 03
    :old.first_name: James
    :old.last_name: Smith
    By: JAVA2S
    :new.id: 04
    :new.first_name: new
    :new.last_name: Rice
    :old.id: 04
    :old.first_name: Celia
    :old.last_name: Rice
    By: JAVA2S
    :new.id: 05
    :new.first_name: new
    :new.last_name: Black
    :old.id: 05
    :old.first_name: Robert
    :old.last_name: Black
    By: JAVA2S
    :new.id: 06
    :new.first_name: new
    :new.last_name: Green
    :old.id: 06
    :old.first_name: Linda
    :old.last_name: Green
    By: JAVA2S
    :new.id: 07
    :new.first_name: new
    :new.last_name: Larry
    :old.id: 07
    :old.first_name: David
    :old.last_name: Larry
    By: JAVA2S
    :new.id: 08
    :new.first_name: new
    :new.last_name: Cat
    :old.id: 08
    :old.first_name: James
    :old.last_name: Cat8 rows updated.SQL>
    SQL>
    SQL> -- clean the table
    SQL> drop table Employee
      2  /Table dropped.SQL>
    SQL>
      

  4.   


    触发器可以实现,但是不建议用触发器来做。 直接在程序里来实现就好了。如果修改某个表的字段,多写个update 语句记录一下就好了。 我的观点,数据库是用来存放数据的,不要把程序做的事情丢给数据库来实现。