SQL Oracle SQL verschachtelte Abfrage

Schlummi

Lieutenant
Registriert
Nov. 2003
Beiträge
733
Hallo!
Folgendes Problem:

ich habe viele Tabellen mit unterschiedlichen namen

xxx1
xxx2
xxx3
.......

dann gibt es eine tabelle Tab1 in der steht unter dem attribut1 welches Teil zu welcher Tabelle gehört

nun möchte ich eine Abfrage haben die mir z.B. die komplette Tabelle xxx2 ausgibt. wie folgt geht es nicht:

SELECT *
FROM
(SELECT attribut1 FROM Tab1 Where blablabla)


die innere Select abfrage liefert das richtige ergebnis (xxx2) ... aber dann gibt mir select * from xxx2 nicht den kompletten inhalt der tabelle xxx2 sondern auch wieder nur das was mir schon die innere select abfrage gegeben hat (xxx2)

Das was im From Teil steht muss halt variabel sein ... aber mit einer solchen geschachtelten SELECT abfrage im FROM teil geht es nicht. Das Ergebnis aus der inneren SELECT abfrage wird halt nicht als Variable sondern als Tabelle interpretiert. Wie kann ich das ändern?

Oracle DB

MFG Schlummi
 
da fehlt ja auch noch eine bedingung. die verknüpfung von tab1 und tab2 erfolgt nicht, statt dessen fragst du im prinzip 2 mal tab1 ab, was natürlich nciht das gewünschte ergebnis aus tab2 liefert.
 
die können ja auch nicht verknüpft werden ... das einzige was die beiden tabellen gemeinsam haben ist, dass die eine Tabelle so heißt wie im attribut1 von TAB1 festgehalten wird. aber sonst sind sie über keinen schlüssel zueinander verknüpfbar

trotzdem Danke ;-)

also um es nochmal klarer zu machen .. es geht, wenn ich es über ein python script laufen lasse, wenn ich in 2 schritten erst den tabellenname (z.B. xxx2) ausgeben lasse und dann im 2. schritt eine abfrage mit der vorher bestimmten variable im FROM teil mache.
aber es soll halt nicht über ein skript laufen, sondern direkt in einer view in oracle
 
Zuletzt bearbeitet:
dann mußt du dir eine dynamische sql-anweisung programmieren, in der die bedingung fpr das "from table" aus der spalte a von tabelle b abgeleitet wird. weiß du, wie man sowas macht?
 
hier ein grundlegendes beispiel, wie man es prinzipiell macht. im beispiel werden die inhalte alle spalten aller tabellen nach einem suchtext analysiert. dazu wird das jeweils benötigte sql selbst erzeugt und ausgeführt.

declare @tabelle as varchar(256)
declare @spalte as varchar(256)
declare @befehl as nvarchar(4000)

declare cur_spalten cursor read_only fast_forward
for select tabelle = a.name, spalte = b.name
from sysobjects a
inner join syscolumns b on
a.id = b.id and a.xtype= 'u' and b.collationid is not null -- Zeichenketten

open cur_spalten

fetch next from cur_spalten into @tabelle, @spalte
while @@fetch_status = 0 begin
set @befehl = 'if exists (select * from [' + @tabelle + '] where cast([' + @spalte + '] as varchar(128)) like ''%Suchtext%'') '
set @befehl = @befehl + ' begin print ''select * from ['+ @tabelle+ '] where cast(['+ @spalte + '] as varchar(128)) like ''''%Suchtext%'''''' end'

execute sp_executesql @befehl

fetch next from cur_spalten into @tabelle, @spalte
end

close cur_spalten
deallocate cur_spalten
 
Zuletzt bearbeitet:
@tm0975: Dir ist schon klar, dass der TE hier eine Oracle Datenbank laufen hat, die PL/SQL versteht. Also warum postest du dann MS SQLServer T-SQL Code? Das kannst du so nicht auf einer Oracle ausführen... :D

Edit: Unter Oracle ist es meines Wissens nach nicht wirklich möglich einen Tabellennamen als Variable zu übergeben um ein SELECT zu formulieren. Jedoch könntest du eventuell eine Pipelined Table Function in PL/SQL erstellen und diese dann wie eine Tabelle im SELECT der View verwenden.

siehe http://www.oracle-base.com/articles/9i/PipelinedTableFunctions9i.php
 
Zuletzt bearbeitet:
ich bin auch der meinung das du mit reinen sql nicht schaffst
bzw das es so unleserlich wird das es nurtzlos ist

eine Pl/sql lösung wäre angebrachter.
Was du brauchst wurde an sich genannt aber will nur noch mach zusammen fassen
du solltest eine Table Function erstellen,
im pl/sql code kannst du dynamisch ein select zusammen bauen das geht über
cursor

wie der cursor aussehen sollte findest du hier : http://www.datenbank-plsql.de/sql.htm Cursor - FOR - Schleifen Bsp2
 
hey! vielen dank schon mal für eure Hilfe! jetzt weiß ich was ich brauche und kann mich da einlesen ... bisschen stressig das ganze, weil ich so was wohl nur dieses eine mal brauchen werde. Ich berichte ob es mir gelungen ist das umzusetzen.

MfG Schlummi
 

Ähnliche Themen

Zurück
Oben