我有3个表,即Customer_1,cust_accts属于Schema_1,Customer_2属于Schema_2。所有表都在同一个数据库中。
我有像这样的SQL查询
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;
现在我的问题在于我应该将模式名称放在这些表的前面,就像schema_1.customer_1这样,我必须放置。并且请不要所有必要的数据库链接,已经给出了连接来访问这些表。
提前感谢您的回答。
答案 0 :(得分:3)
以下sql工作得很好:
选择计数(*) 来自SCHEMA1.TABLE1 ST1 INNER JOIN SCHEMA2.TABLE2 ST2 ON ST1.COMMON_FIELD = ST1.COMMON_FIELD;
答案 1 :(得分: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 ...
但是通过包装程序来管理可能更简单。