2015-06-24 46 views
3

我的設置是這樣的如何在sqlplus甲骨文指定TABLESPACE_NAME選擇

SQL> SELECT tablespace_name, table_name 
    FROM all_tables 
    WHERE tablespace_name = 'MYSPACE'; 

TABLESPACE_NAME   TABLE_NAME 
-------------------------- ------------------------------ 
MYSPACE     MYTABLENAME 
MYSPACE     MYOTHERTABLENAME 

現在我想SELECT * FROM MYSPACE.MYTABLENAME;但是這顯然不是你怎麼做。

ERROR at line 1: 
ORA-00942: table or view does not exist 

我的預期結果是從該表中獲取所有記錄。就像我會,如果它是MySQL。

感謝

+0

第二個查詢的預期結果是什麼?我的意思是你想達到什麼目的? –

+1

我想你想要的是從all_tables中選擇owner和table_name,然後'select * from owner.tablename'查詢 – MrSimpleMind

+0

我已經更新了這個問題,謝謝@PravinSatav。 – MyGGaN

回答

5

您從表空間,這是不一樣的你的所有者/架構名稱選擇。這就是爲什麼。例如,表空間SYSTEM擁有者SYS。你確實從Sys.xxx中選擇;

好的。

SELECT owner, tablespace_name, table_name 
FROM all_tables 
WHERE tablespace_name = 'MYSPACE'; 

然後

select * from [ owner ].[ table_name ]; 

(值得一提的:從dba_tables/user_tables選擇..)

3

表未由表空間擁有。表空間是a logical storage storage structure。當你創建一個表(或索引)時,你需要指定哪個表空間的內容應該是stored in。除非您正在執行DBA任務,否則您並不需要知道數據存儲在哪個表空間中。

您可能只是會混淆術語。表格由schemas擁有。如果查詢owner列,而不是tablespace_name你可能會看到這樣的:

SQL> SELECT owner, table_name 
    FROM all_tables 
    WHERE tablespace_name = 'MYSPACE'; 

OWNER      TABLE_NAME 
-------------------------- ------------------------------ 
MYUSER      MYTABLENAME 
MYUSER      MYOTHERTABLENAME 

然後你就可以從查詢與

SELECT * FROM MYOWNER.MYTABLENAME; 

當然,如果車主其實是你的,那麼你不需要在表格名稱前面添加模式;你可以選擇FROM MYTABLENAME。 (你也可能有同義詞或會話設置,使架構前綴不必要,但這有點偏離主題)。如果你擁有桌子,你也會在USER_TABLES中看到它。