2014-09-10 38 views
1

我有3個表,即Customer_1,屬於Schema_1的cust_accts和屬於Schema_2的Customer_2。所有表都在同一個數據庫中。如何從2個不同模式連接2個表,但在同一個數據庫中

我有這樣

declare 

l_cust_id customer_1.customer_id%type; 

begin 
select customer_id into l_cust_id 
from cust_accts 
where 
customer_number=''; 

insert into Customer_2 
(
column_1, 
column_2, 
) 
select 
d1.column_1, 
d1.column_2 
from 
customer_1 d1 
where d1.customer_id=l_cust_id; 
commit; 
end; 

一個SQL查詢現在在這裏,我的問題是所有我應該把模式名稱在這些表的面前,就像這樣,所有我必須把schema_1.customer_1。並且請不要將所有必需的db連接,連接都給予訪問這些表。

在此先感謝您的答案。

+0

在表格之前引用架構。 – Sathya 2014-09-10 08:18:16

+0

嗨,謝謝,所以在每個地方我都必須參考模式禮儀? – user2647888 2014-09-10 08:22:08

+0

該文檔告訴您如何引用[其他模式對象](http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements009.htm#SQLRF51134);和[每個命令的語法](http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_10002.htm#i2126073)都會顯示模式的添加位置。也不確定你的意思是關於連接和鏈接,如果這是在同一個數據庫。 – 2014-09-10 08:23:39

回答

2

假設您沒有任何同義詞並且已授予必要的特權,則需要爲不在當前模式中的任何對象指定模式。如果您已連接的Schema_1那麼你需要前綴由Schema_2擁有的對象:

insert into Schema_2.Customer_2 (...) 
select ... from customer_1 d1 
where ... 

如果你連爲Schema_2那麼你需要前綴由Schema_1擁有的對象:

insert into Customer_2 (...) 
select ... from Schema_1.customer_1 d1 
where ... 

(「連接爲」是一種簡化,如果你是新的我覺得就足夠了,你可以在會話中改變你的當前模式,但將只是現在混淆!)

如果你想確切相同的SQL對任何用戶或具有正確權限的任何其他用戶均有效恩,你可以前綴的所有對象:

insert into Schema_2.Customer_2 (...) 
select ... from Schema_1.customer_1 d1 
where ... 

但隨後或許應該通過簡單的程序包管理。

該文檔有更多關於schema, objects, references and name resolution

+0

嗨,亞歷克斯,謝謝你的回答,現在我知道了有關前綴的事情後,我看到了你分享的鏈接。 – user2647888 2014-09-11 14:14:52

2

以下SQL完美工作:

SELECT COUNT(*) 從SCHEMA1.TABLE1 ST1 INNER JOIN SCHEMA2.TABLE2 ST2 ON ST1.COMMON_FIELD = ST1.COMMON_FIELD;

相關問題