2013-09-30 67 views
1

嗨,我新來oracle使用11g exprs版和熟悉mysql。我們可以使用下面的代碼在MySQLoracle 11g顯示用戶創建表

show databases; 

什麼是Oracle中的相應命令來顯示所有數據庫。或者我如何顯示所有數據庫。此外,我們有

use mydatabase; 

以chanage數據庫在mysql中。我如何在oracle中更改數據庫。我試圖使用以下命令顯示所有所有者和他們的表

select table_name, owner from all_tables; 

它工作正常。但是,當我試圖顯示我所創建的表,通過將其中cluase

select table_name, owner from all_tables where owner='root'; 

它顯示沒有行選擇。爲什麼會發生?在使用where子句時,我也遇到了大多數查詢中的相同問題。沒有where子句它工作正常。但使用時,結果有例如

select * from all_tab_comments where owner='root'; 
select constraint_name, constraint_type from user_constraints where table_name='location'; 

選擇沒有行是什麼,在Oracle專用where子句或與我查詢的問題。

回答

0

使用的視圖:標籤

select * from tabs; 
+0

'tabs'是一個數據字典視圖,該數據字典視圖在相當長一段時間內被刪除。如何使用古代數據字典表,而不是使用相同(不正確)謂詞的正確'all_tables'視圖,這也不是很明顯。 –

+0

選項卡顯示當前模式的表,因此不需要謂詞,只需從選項卡中選擇*,從未聽說它已被棄用。 – Gar

+1

['TABS'是'USER_TABLES'的同義詞](http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_5189.htm#sthref2762),似乎並不推薦使用,儘管我從來沒有見過它用過;對我來說更有意義的是使用普通的'user_ *'模式來匹配其他所有內容。 ('TAB' [已棄用](http://docs.oracle.com/cd/E18283_01/server.112/e17110/statviews_5178.htm#sthref2636)。) –

2

您的用戶名是很不可能的root;但它可能是ROOT,在這種情況下,你可以這樣做:

select table_name, owner from all_tables where owner='ROOT'; 

所有者名稱是區分大小寫的,並且包括用戶和表名的所有對象都是大寫默認情況下(除非他們與雙創建 - 引用,這是一個壞主意)。如果您已連接的用戶,只能看到自己的表,你也可以這樣做:

select table_name from user_tables; 

還有就是dba_tables視圖這也說明你的表,你沒有權限,但只能看到提升特權。

Oracle沒有像其他產品一樣的「數據庫」。您可能意味着schemas,作爲對象的邏輯分組。模式和用戶基本上是同義詞。

要獲得所有模式的列表,您可以查詢dba_users(如果您擁有正確的權限),或者獲取具有對象的模式列表(因爲您可能有隻使用其他模式中的對象的用戶),您可以請執行以下操作:

select distinct owner from dba_objects; 

...或all_objects只能再次查看您有權限的內容。看到什麼樣的對象:

select owner, object_type, count(*) from dba_objects group by owner, object_type; 

文檔解釋了保存所有這些信息的static data dictionary views。除非您作爲特權用戶連接,否則您將無法看到所有人。


兩款產品之間會有很多差異;你可能會更好地嘗試找到一個通過它們工作的教程,而不是使用試驗和錯誤,並試圖瞭解每一步都出了什麼問題。或者至少熟悉Oracle文檔,以便研究問題。

+0

我已經以root身份創建用戶。它會自動轉換爲大寫字母嗎? – Shameer

+0

如果你做'創建用戶root',那麼它對Oracle來說就是'ROOT',是的;在'dba_users.username','dba_objects.owner'等中。你也可以'從dual'中選擇用戶來看它報告爲'ROOT'。所有對象名稱在默認情況下都不區分大小寫,並被視爲大寫。這也適用於您的第二個查詢中的LOCATION表名。 –

+0

多一個dout ...在查詢中** select * from location **給出結果並且表名是小寫的。所以大寫字母只適用於哪裏cluase ..? – Shameer

1

首先,當您更換平臺時,會出現術語差異。 MySQL稱之爲「數據庫」與Oracle稱之爲「模式」最相似。如果您使用的是Oracle XE,則只能在機器上使用一個數據庫(使用Oracle術語)。您可以在該數據庫中有多個模式。

ownerall_tables是擁有該表的模式的名稱。假設你創建了一個Oracle用戶root(這對於數據庫用戶來說似乎是一個奇怪的選擇),並且假設你沒有創建一個全部小寫的區分大小寫的用戶名(這會產生大量問題), owner將始終爲大寫。

SELECT owner, table_name 
    FROM all_tables 
WHERE owner = 'ROOT' 

在Oracle中,通常不會從一個模式更改爲另一個模式。你要麼完全限定

SELECT * 
    FROM schema_name.table_name 

或您所創建的表名的同義詞(公共或私營),爲您要引用

CREATE SYNONYM synonym_name 
    FOR schema_name.table_name; 

SELECT * 
    FROM synonym_name 

如果你真的想,但是,你可以改變你目前的對象用於名稱解析目的的模式

ALTER SESSION SET current_schema = <<schema name>>