2009-07-25 13 views
0

Ich habe eine VIEW mit der CREATE OR REPLACE VIEW-Anweisung auf der Domain-Schema-Ebene erstellt.Erstellen VIEW in System-Ebene

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; 

Also, wenn ich dich ein, um die Domain-Schema und Lauf Abfrage - select * from domain1.SERV dann würde ich alle die Ergebnisse erhalten, wie beabsichtigt.

Jetzt habe ich die obige create-Anweisung für alle Domänenschemas wiederverwenden und wenn ich alle Ergebnisse auf einmal sehen möchte, würde ich Abfrage mit "union select" verwenden, da die Ansicht das gleiche Format haben kann während.

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 

und so weiter bis zum letzten Domain-Schema.

Nun, wie kann ich die gleiche Ansicht in der Systemebene schaffen zu wissen, dass in der „all_object“ -Tabelle wird es meine Ansicht Liste (object_type='VIEW' und object_name='SERV') und die „Eigentümer“ Spalte meiner Domain-Schema aller Liste wäre. Die VIEW in dieser System-Ebene zB Name sagen ALL_SERV wo, wenn ich Abfrage ausführen würde es alle Datensätze aus allen Domain-Schemas aufgelistet.

Also können Sie helfen?


Ich erstelle überhaupt kein Objekt. Ich möchte nur die gleiche Sicht auf der Systemebene erstellen. Die Struktur der VIEW soll die gleiche sein, die ich auf der Doamin-Ebene erstellt habe. Ich denke, ich muss die VIEW erstellen, die auf jede Domain zeigt, und das bedeutet, dass ich x Anzahl der Aufrufe als Anzahl der Domain habe.

Irgendein anderer einfacher Weg, dies zu tun?

+0

Sind Sie auf der Suche nach Dynamik? Wenn Sie also eine andere Domain hinzufügen, wird diese automatisch in der Ansicht angezeigt. – David

+0

Sie erstellen überhaupt keine Objekte unter dem SYSTEM-Schema? Das wäre eine schlechte Sache. –

Antwort

0

Ich habe das aussortiert. Alles, was ich brauche, ist das Grant-Privileg.

GRANT SELECT ANY TABLE TO IN_DBAMN; 

Das ist es.

Jetzt kann ich VIEW auf Systemebene erstellen.

CREATE OR REPLACE VIEW ALL_SERV 
as 
( 
    select * from domain1.serv union all select * from domain2.serv union all etc... 
); 

Diese Ansicht wird auch aktualisiert, sobald alle Daten auf ihrer Domänenebene geändert wurden.

+0

Ändern Sie für jedes Schema "domain1" in "domain2" usw. separat. Sie können das erforderliche SQL generieren, indem Sie die Ansicht ALL_OBJECTS abfragen. –

+0

Wenn Sie eine andere Frage haben, müssen Sie sie möglicherweise als neue Frage stellen. –

+0

Danke Jeff.Ich habe bereits für jede Domain ein öffentliches Synonym erstellt und weiß nun, wie ich jedes dieser öffentlichen Synonyme mit einem öffentlichen Synonym kombinieren werde. Ist es möglich zu tun? –

2

Um diese Ansicht auf die "Systemebene" (wie Sie es nennen) zu setzen, benötigen Sie ein öffentliches Synonym. Ich nehme an, das ist Oracle mit den Namen, die Sie verwenden. Versuchen:

CREATE OR REPLACE PUBLIC SYNONYM serv FOR domain1.serv; 

Sie benötigen die entsprechenden Berechtigungen für diese, nämlich CREATE PUBLIC SYNONYM. Der Benutzer benötigt Objektprivilegien für das Ziel, um es auszuwählen (dh das Synonym erlaubt es niemandem, auf etwas zuzugreifen, das er sonst nicht kann).

Das heißt, Sie verwenden eine Menge Gewerkschaften. Davor wäre ich vorsichtig.