我正在使用Oracle 11G。如何在像select * from dbname.schemaname.table
這樣的查詢中提供dbname和模式名稱。我想知道語法。如何從正確的數據庫和模式中選擇?
如果我寫的查詢select * from employees
,我得到的錯誤
表或視圖不存在
我相信我有有的名稱爲dbname.schemaname.tablename
,但我不知道語法。有人可以幫忙嗎?
我正在使用Oracle 11G。如何在像select * from dbname.schemaname.table
這樣的查詢中提供dbname和模式名稱。我想知道語法。如何從正確的數據庫和模式中選擇?
如果我寫的查詢select * from employees
,我得到的錯誤
表或視圖不存在
我相信我有有的名稱爲dbname.schemaname.tablename
,但我不知道語法。有人可以幫忙嗎?
首先,如果你想從另一個架構查詢,你可以做這樣的:
select * from HR.Employees
其中HR是模式的名稱,任何方式,你必須授予SELECT特權模式從讀另外一個,或者授予DBA到執行這樣
grant dba to my_user;
其中my_user查詢的模式是,你從執行您的查詢的用戶。
如果你想閱讀其他數據庫中的數據不是要連接去,你可以使用這樣的數據庫鏈接做到這一點:
create database link "my_link"
connect to "HR" identified by "hr"
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ORACLE)
)
)'
/
其中主機爲其他數據庫安裝和SID是服務器數據庫的名稱。
,然後執行查詢是這樣的:
select * from [email protected]_Link;
創建公共同義詞SYNONYM您的選擇之前,反對
CREATE OR REPLACE PUBLIC SYNONYM suppliers
FOR app.suppliers;
是:
select * from app.suppliers;
SYNONYM後:
select * from suppliers;
爲什麼在連接字符串中沒有提供DBname?只有在引用不同於登錄用戶的架構時才需要架構。數據庫鏈接可以使用@ so來引用。'schema.table @ link'從ALL_DB_LINKS中選擇*將顯示登錄用戶可訪問的鏈接。也許DBLink是你之後的東西? – xQbert
你確定桌子是否存在?該表是一個可能在缺省HR模式下的表,*如果它已經安裝了*,那麼如果你沒有以HR登錄,你可以從hr.employees中選擇*但只有當它存在於那裏,有正確的權限來查看它。爲什麼你認爲你需要'dbname',是基於不同的數據庫平臺? –