版本中刪除物件導致當前和子版本中物件不可見
在文件中看到這部分的描述,不過有一個疑點不是很確認,於是驗證了一下。
如果一個使用者啟用了版本,使用者執行某個過程或函式時,如果在當前版本中找不到,自動會去父版本尋找,如果還找不到會去祖先版本中尋找,一直到ORA$BASE中都無法找到,才回報錯物件不存在。
但是使用者明確的刪除操作會使得繼承關係中斷。一個使用者如果刪除當前版本中的物件,那麼父版本中的物件並不會刪除,只不過這個物件在當前版本中不在可見。
看到文件上的這個描述,我的疑問是,對於當前版本的子版本,能否判斷父版本中物件是被刪除,還是根本沒有建立。換句話說,當前版本刪除物件後,自版本能否繞過當前版本從父版本處繼承物件。
-bash-3.2$ sqlplus test/test
SQL*Plus: Release 11.2.0.2.0 Production on Thu Sep 15 21:04:58 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> set pages 100 lines 120
SQL> create user u1 identified by u1 default tablespace users enable
editions;
User created.
SQL> grant connect, resource, dba to u1;
Grant succeeded.
SQL> conn u1/u1
Connected.
SQL> select sys_context('USERENV', 'CURRENT_EDITION_NAME') from dual;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
------------------------------------------------------------------------
ORA$BASE
SQL> create function f1 return varchar2 as
2
begin
3
return 'Edition ORA$BASE';
4
end;
5
/
Function created.
SQL> select f1 from dual;
F1
-----------------------------------------------------------------
Edition ORA$BASE
SQL> create function f2 return varchar2 as
2
begin
3
return 'Edition ORA$BASE';
4
end;
5
/
Function created.
SQL> select f2 from dual;
F2
------------------------------------------------------------------
Edition ORA$BASE
SQL> create edition e1;
Edition created.
SQL> alter session set edition = e1;
Session altered.
SQL> select f1 from dual;
F1
-------------------------------------------------------------------
Edition ORA$BASE
SQL> select f2 from dual;
F2
-------------------------------------------------------------------
Edition ORA$BASE
SQL> drop function f1;
Function dropped.
SQL> select f1 from dual;
select f1 from dual
*
ERROR at line 1:
ORA-00904: "F1": invalid identifier
SQL> select sys_context('USERENV', 'CURRENT_EDITION_NAME') from dual;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
----------------------------------------------------------------
E1
SQL> create edition e2 as child of e1;
Edition created.
SQL> alter session set edition = e2;
Session altered.
SQL> select f1 from dual;
select f1 from dual
*
ERROR at line 1:
ORA-00904: "F1": invalid identifier
SQL> select f2 from dual;
F2
-----------------------------------------------------------------------
Edition ORA$BASE
SQL> alter session set edition = ora$base;
Session altered.
SQL> select f1 from dual;
F1
-----------------------------------------------------------------------
Edition ORA$BASE
可以看到,在當前版本中刪除物件後,父版本中物件仍然存在,但是繼承關係中斷,而當前版本的子版本也不可能再次繼承該過程,當然版本中可以建立同名的物件,但是已經和父版本沒有關係了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-707622/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 版本影響當前使用者看到的物件物件
- Rails中刪除資料物件AI物件
- 版本不當導致的exp出錯
- java 中構建不可變物件Java物件
- 從Redis中刪除大集合物件的方法Redis物件
- 刪除列過程中,需要持有物件的鎖物件
- java物件導向(中)Java物件
- 物件導向中類和物件的定義是什麼?物件
- Javascript 物件導向中的建構函式和原型物件JavaScript物件函式原型
- JavaScript刪除和清空物件屬性JavaScript物件
- js:當前焦點物件JS物件
- Delphi 中物件導向程式設計之我見 (轉)物件程式設計
- 快速刪除oracle物件Oracle物件
- Golang 中的物件導向Golang物件
- [寫作中...]Js物件導向(2): 建立物件JS物件
- JavaScript物件導向怎樣刪除標籤頁?JavaScript物件
- Python中可變物件和不可變物件的區別?Python基礎Python物件
- 在Linux中,如何檢視當前系統的版本資訊?Linux
- 刪除字串中的子串字串
- 類和物件(中)物件
- js為物件新增和刪除屬性JS物件
- jQuery 刪除當前li元素jQuery
- 檢視git當前版本號Git
- 深入理解Java中的不可變物件Java物件
- Python可變物件和不可變物件Python物件
- vue2.x版本中Object.defineProperty物件屬性監聽和關聯VueObject物件
- Lua 中實現物件導向物件
- JavaScript中的物件導向----類JavaScript物件
- Java 中建立子類物件會建立父類物件麼?Java物件
- 物件導向:期待正當年華,與你欣喜相見物件
- Oracle中刪除使用者下所有物件的多種方法Oracle物件
- Unfolder使用教程:如何插入,刪除和更新物件物件
- 語法:Python中的可覆蓋物件與不可覆蓋物件Python物件
- 1.4.2. 檢查當前版本號
- 查詢當前SQL Server的版本SQLServer
- Java中@Valid子物件註釋Java物件
- Oracle database 19c中獲取當前資料庫版本的方法OracleDatabase資料庫
- 判斷Android 當前版本是否為debug版本Android