Oracle 跨使用者表間資料操作(觸發器實現)

暖楓無敵發表於2014-12-03

需求:

     使用者hfxcroad中有一個表P_TABLE,建立表語句如下:

    create table P_TABLE
    (
        ID varchar2(50) default SYS_GUID(),
        NC varchar2(50)
    );

    使用者fdfxkh中有一個表P_TABLE,建立語句如下:

   create table P_TABLE
   (
       ID varchar2(50) default SYS_GUID(),
       NC varchar2(50),
       V numeric(4)
   );

   當我們在使用者fdfxkh的P_TABLE中插入資料,並且V欄位值大於15時,向使用者hfxcroad的P_TABLE表中插入NC值,模擬由實時資料表產生預警資訊表,我們該怎麼做?


解決方案:

1、由於是跨使用者運算元據,所以第一步我們要將使用者hfxcroad中的表P_TABLE的許可權授權給fdfxkh使用者。

     在使用者hfxcroad下執行以下授權SQL:

    GRANT ALTER ON  hfxcroad.P_TABLE TO fdfxkh;

    GRANT DELETE ON  hfxcroad.P_TABLE TO fdfxkh;

    GRANT INDEX ON  hfxcroad.P_TABLE TO fdfxkh;

    GRANT INSERT ON  hfxcroad.P_TABLE TO fdfxkh;

    GRANT REFERENCES ON  hfxcroad.P_TABLE TO fdfxkh;

    GRANT SELECT ON   hfxcroad.P_TABLE TO fdfxkh;

    GRANT UPDATE ON   hfxcroad.P_TABLE TO fdfxkh;


2、在使用者fdfxkh中建立after插入觸發器,如下:

    create or replace trigger tr_Warn
    after insert on fdfxkh.P_TABLE
    for each row
    begin
          if :new.V > 15 then
              insert into hfxcroad.P_TABLE(NC) values(:new.NC);
         end if;
    end;


3、在使用者fdfxkh中執行插入語句:

    insert into P_TABLE(NC,V) values('20141203',25);

   

4、到使用者hfxcroad中執行查詢語句:

    select * from P_TABLE;

   會看到剛才滿足條件後的記錄。





相關文章