在系统级别创建VIEW

时间:2009-07-25 00:17:08

标签: sql database oracle

我使用域架构级别的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个视图作为域的数量。

还有其他简单的方法吗?

2 个答案:

答案 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... 
);

一旦在域级别修改任何数据,此视图也会更新。