我使用域架构级别的VIEW
语句创建了CREATE OR REPLACE VIEW
。
create or replace VIEW SERV as
select loop.loop_serv serv, component.cmpnt_id,component.loop_id
from component,loop where component.loop_id = loop.loop_id
union select distinct ' ',0,0 from component,loop;
因此,如果我登录域架构并运行查询 - select * from domain1.SERV
,那么我会按预期获得所有结果。
现在我已经为所有域模式重用了上面的create语句,如果我想一次性查看所有结果,那么我将使用“union select”查询,因为可以理解视图在整个过程中具有相同的格式
select * from domain1.SERV union all
select * from domain2.SERV union all
select * from domain3.SERV union all
select * from domain4.SERV union all
select * from domain5.SERV union all
依此类推,直到最后一个域架构。
现在我怎么能在系统级别创建相同的VIEW,因为知道在“all_object
”表中它会列出我的视图(object_type='VIEW'
和object_name='SERV'
)和“所有者”列将是我的所有域架构列表。此系统级别的VIEW例如名称为ALL_SERV,如果我运行查询,它将列出所有域模式中的所有记录。
你能帮忙吗?
我根本没有创建一个对象。我只想在系统级别创建相同的VIEW。 VIEW的结构应与我在doamin级别创建的结构相同。我想我必须创建指向每个域的VIEW,这意味着我有x个视图作为域的数量。
还有其他简单的方法吗?
答案 0 :(得分:2)
要将该视图置于“系统级别”(如您所说),您需要一个公共同义词。我假设这是您正在使用的名称的Oracle。尝试:
CREATE OR REPLACE PUBLIC SYNONYM serv FOR domain1.serv;
您需要适当的权限,即CREATE PUBLIC SYNONYM
。用户将需要目标上的对象权限来选择它(即同义词不允许某人访问他们不能访问的内容)。
话虽如此,你正在使用大量的工会。我会对此保持警惕。
答案 1 :(得分:0)
我把它排除了。我所需要的只是授予权限。
GRANT SELECT ANY TABLE TO IN_DBAMN;
就是这样。
现在我可以在系统级别创建VIEW。
CREATE OR REPLACE VIEW ALL_SERV
as
(
select * from domain1.serv union all select * from domain2.serv union all etc...
);
一旦在域级别修改任何数据,此视图也会更新。