在11.2中,Oracle数据库引入的版本的概念,这为应用程序的升级提供了极大的方便。
这篇简单描述创建版本的语法,以及版本的使用。
下面是一个最简单的例子,来说明版本的含义:
SQL> conn yangtk/yangtk
已连接。
SQL> select synonym_name from user_synonyms;
未选定行
SQL> create synonym s_1 for t;
同义词已创建。
SQL> create edition my_edition;
版本已创建。
SQL> select sys_context('USERENV', 'CURRENT_EDITION_NAME') from dual;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
----------------------------------------------------------------------------------
ORA$BASE
SQL> desc t
名称 是否为空? 类型
----------------------------------- -------- --------------------------------------------
ID NUMBER
NAME VARCHAR2(30)
TYPE VARCHAR2(20)
SQL> desc s_1
名称 是否为空? 类型
----------------------------------- -------- --------------------------------------------
ID NUMBER
NAME VARCHAR2(30)
TYPE VARCHAR2(20)
SQL> alter session set edition = my_edition;
会话已更改。
SQL> create or replace synonym s_1 for t1;
同义词已创建。
SQL> desc t1
名称 是否为空? 类型
----------------------------------- -------- --------------------------------------------
ID NUMBER
SQL> desc s_1
名称 是否为空? 类型
----------------------------------- -------- --------------------------------------------
ID NUMBER
SQL> alter session set edition = ora$base;
会话已更改。
SQL> desc t1
名称 是否为空? 类型
------------------------------------ -------- --------------------------------------------
ID NUMBER
首先创建一个指向T的同义词S_1,然后检查当前生效的版本,然后创建一个新的版本MY_EDITION,并启动这个版本,然后重建同义词S_1指向T1。上面的结果显示EDITION没有起作用,在不同的版本中看到的同义词是相同的。
这个由于当前用户并没有启用版本信息,下面启用版本后重复上面的操作:
SQL> drop edition my_edition;
版本已删除。
SQL> drop synonym s_1;
同义词已删除。
SQL> alter user yangtk enable editions;
用户已更改。
SQL> create synonym s_1 for t;
同义词已创建。
SQL> desc t
名称 是否为空? 类型
----------------------------------- -------- --------------------------------------------
ID NUMBER
NAME VARCHAR2(30)
TYPE VARCHAR2(20)
SQL> desc s_1
名称 是否为空? 类型
----------------------------------- -------- --------------------------------------------
ID NUMBER
NAME VARCHAR2(30)
TYPE VARCHAR2(20)
SQL> create edition my_edition;
版本已创建。
SQL> select sys_context('USERENV', 'CURRENT_EDITION_NAME') from dual;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
------------------------------------------------------------------------------------
ORA$BASE
SQL> alter session set edition = my_edition;
会话已更改。
SQL> create synonym s_1 for t1;
create synonym s_1 for t1
*
第 1 行出现错误:
ORA-00955: 名称已由现有对象使用
SQL> create or replace synonym s_1 for t1;
同义词已创建。
SQL> desc s_1
名称 是否为空? 类型
----------------------------------- -------- --------------------------------------------
ID NUMBER
SQL> desc t1
名称 是否为空? 类型
----------------------------------- -------- --------------------------------------------
ID NUMBER
SQL> alter session set edition = ora$base;
会话已更改。
SQL> desc s_1
名称 是否为空? 类型
----------------------------------- -------- --------------------------------------------
ID NUMBER
NAME VARCHAR2(30)
TYPE VARCHAR2(20)
可以看到,在不同的版本中,同义词的指向是不同的。这种方式对于程序的升级而言,存在很大的方便之处。
除了支持同义词以外,版本还支持VIEW、PROCEDURE、FUNCTION、PACKAGE、TYPE、TRIGGER和LIBRARY。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-614489/ ,如需转载,请注明出处,否则将追究法律责任。