Oracle11gr2触发器新增版本升级功能(二)

Oracle11gr2增加了版本升级触发器功能。

这篇简单描述一个利用CROSSEDITION触发器降级版本的例子。

Oracle11gr2触发器新增版本升级功能(一):http://yangtingkun.itpub.net/post/468/495673

 

 

描述一个简单的降级的例子,这个例子时接着上一篇文章:

SQL> ALTER DATABASE DEFAULT EDITION = E_1;

数据库已更改。

SQL> CONN YANGTK
输入口令:
已连接。

SQL> SELECT SYS_CONTEXT('USERENV', 'CURRENT_EDITION_NAME') FROM DUAL;

SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
---------------------------------------------
E_1

当前的系统状态就是升级后的状态,如果发现升级后存在问题,需要降级版本,那么可以采用下面的方法:

SQL> ALTER SESSION SET EDITION = ORA$BASE;

会话已更改。

SQL> SELECT SYS_CONTEXT('USERENV', 'CURRENT_EDITION_NAME') FROM DUAL;

SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
---------------------------------------------
ORA$BASE

SQL> CREATE TRIGGER T_CROSSEDITION_PERSON
  2  BEFORE INSERT OR UPDATE ON T_PERSON
  3  FOR EACH ROW
  4  REVERSE CROSSEDITION
  5  BEGIN
  6     :NEW.FULL_NAME := NULL;
  7  END;
  8  /

触发器已创建

创建一个用于降级的触发器,下面监测触发器的工作,不过首先要删除上一篇文章中建立的升级的触发器,避免二个CROSSEDITION之间相互干扰:

SQL> ALTER SESSION SET EDITION = E_1;

会话已更改。

SQL> DROP TRIGGER T_CROSSEDITION_PERSON;

触发器已删除。

SQL> INSERT INTO T_PERSON
  2  VALUES (18, 'A', 'B', 'AB');

已创建 1 行。

SQL> SELECT *    
  2  FROM T_PERSON
  3  WHERE ID = 18;

        ID FIRST_NAME            LAST_NAME       FULL_NAME
---------- --------------------- --------------- ------------------------------------
        18 A                     B

SQL> COMMIT;

提交完成。

SQL> ALTER SESSION SET EDITION = ORA$BASE;

会话已更改。

SQL> SELECT * FROM T_PERSON;

        ID FIRST_NAME            LAST_NAME       FULL_NAME
---------- --------------------- --------------- ------------------------------------
         1 T                     VIEW
         2 T_TABLE               TABLE
         3 T_TABLE               TRIGGER
         4 T_MYTEST              TYPE
         5 FORCE                 TYPE
         6 T_TYPE                TYPE
         7 ABC                   TABLE
         8 S_1                   SYNONYM
         9 T1                    TABLE
        10 S_MY_EDITION          SYNONYM
        11 T_PERSON              TABLE
        12 SYS_C0011140          INDEX
        13 T_LOG                 TABLE
        14 T                     TRIGGER
        15 TEST.US.ORACLE.COM    DATABASE LINK   TEST.US.ORACLE.COMDATABASE LINK
        16 T_CROSSEDITION_PERSON TRIGGER         T_CROSSEDITION_PERSONTRIGGER
        17 TEST                  TEST
        18 A                     B

已选择18行。

SQL> UPDATE T_PERSON
  2  SET LAST_NAME = 'REVERSE'
  3  WHERE ID = 16;

已更新 1 行。

SQL> SELECT *
  2  FROM T_PERSON
  3  WHERE ID = 16;

        ID FIRST_NAME            LAST_NAME       FULL_NAME
---------- --------------------- --------------- ------------------------------------
        16 T_CROSSEDITION_PERSON REVERSE

SQL> COMMIT;

提交完成。

可以看到,这个触发器在子版本和当前版本中都是生效的。

SQL> ALTER DATABASE DEFAULT EDITION = ORA$BASE;

数据库已更改。

SQL> DROP TRIGGER T_CROSSEDITION_PERSON;

触发器已删除。

SQL> ALTER TABLE T_PERSON DROP COLUMN FULL_NAME;

表已更改。

将系统的默认版本修改为降级后的版本,确保以后用户都使用降级后的版本,然后就可以删除CROSSEDITION触发器,并最终删除升级时添加的列。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-624628/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-624628/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值