天天看点

Oracle 跨用户表间数据操作(触发器实现)

需求:

     用户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);

Oracle 跨用户表间数据操作(触发器实现)

4、到用户hfxcroad中执行查找语句:

    select * from P_TABLE;

   会看到刚才满足条件后的记录。

Oracle 跨用户表间数据操作(触发器实现)