sql statements ausführen

dabla

Neuer Benutzer
Beiträge
4
Hallo,
habe ein Problem bezüglich SQL. Ich habe eine Tabelle erhalten, in der 100 Zeilen mit SQL Statenments sind
z.b.
Spatle 1
select * from test 1 union
select * from test 2 union
select * from test 12 union

jetzt bräuchte ich irgendwie eine Mögilchkeit, diese Statements auszuführen
Also dann dann untern dem Strich eine Abfrage rauskommt, die die Statements der Tabelle ausführt. Da diese ja bereits mit union verbunden sind, bräcuhte man diese nur nacheinander aufreihen
Hat jemand eine idee?
 
Werbung:

dabla

Neuer Benutzer
Beiträge
4
Nur zur Info. Habe den Forumseintrag SQL Abfrage bereits gelesen. Der hilft mir leider nicht weiter, da ich eben nru eine Tabelle mit den Abfragen habe.
 

ukulele

Datenbank-Guru
Beiträge
4.579
Das könnte mit SELECT EXEC TOP 1 spalte1 FROM tabelle gehen, wenn die Statements verkettet werden müssen, z.B. Aufgrund von UNION musst du eine Schleife bauen und mit Variablen arbeiten. Um Statements auszuführen die als Text vorliegen ist EXEC auf jedenfall der richtige Weg.
 

dabla

Neuer Benutzer
Beiträge
4
Hallo,
kenne das EXCE Top nicht. Was tut das genau bzw wie meinst du das mit der Schleife. Bin leider noch kein SQL Spezi :)
 

ukulele

Datenbank-Guru
Beiträge
4.579
also TOP 1 wäre jetzt nur die Auswahl des ersten Datensatzes gewesen, allerdings gibts das eventuell auch nur unter MS SQL. Bei MySQL würde man mit LIMIT arbeiten. Es war jetzt auch nur gedacht erstmal ein Statement auszuführen.

EXEC @variable würde den Text in der Variable als SQL Statement ausführen. Eventuell musst du auch hier nach einem Oracle Equivalent suchen.
 

Charly

Datenbank-Guru
Beiträge
306
Hallo dabla,

für das Ausfüren von Strings würde ich unter Oracle folgenden Befehl benutzen:

Code:
execute immediate('begin '||myStr||' end;');

Hierbei ist myStr das auszufürende SQL-Statement das in einer Variable gespeichert ist.
Du könntest jetzt mit einem Cursor duch die Tabelle laufen und damit die Stringvariable befüllen.
eine Loop-Schleife unter Oracle könnte so aussehen:

Code:
loop
 
  <Abbruchbedingung>
  <Anweisung>
 
end loop;

um Curor und Variablen zu deklarieren kannst Du folgende Befehle benutzen:

Code:
DECLARE CURSOR myCursor IS SELECT <Spalte> FROM <Tabelle>;
DECLARE myStr VARCHAR2(100):=NULL;

Folgende Anweisungen brauchst du um Daten vom Cursor in die Variable einzulesen:

Code:
open myCursor;
fetch myCursor into myStr;
close myCursor;

[EDIT] open undclose müssen auserhalb der Schleife sein. Die Fetch-Anweisung innerhalb.

Wenn Du eine Zeile mit dem Cursor eingelesen hast springt der automatisch auf die nächste Zeile.
Erzeug Dir noch eine 2.te Variable an die Du den Inhalt von myStr immer anhängen kannst. Der Inhalt von myStr wird sonst immer mit der letzten FECHT INTO überschrieben.
Um nicht über das Ende der Tabelle zu laufen und einen Fehler auszulösen brauchst Du noch die Abbruchbedingung in der Loop-Schleife

Einfach mit

Code:
exit when myCursor%NOTFOUND;"

aus der Schleife springen.

Ich habe leider keinen Oracle Server da sonst würde ich dir aus den Brocken ein ordentliches Sript basteln und die Syntax prüfen. Ohne sowas zu testen möchte ich das aber hier nicht einstellen.
Auserdem habe ich schon lage nichts mehr mit Oracle gemacht (Letzte Version war Ocacle 8i:D ).

Gruß Charly
 

dabla

Neuer Benutzer
Beiträge
4
vielen dank für dein ausführliches kommentar. Habe dazu nur noch eine Frage. Der String wird ja ausgeführt, aber wie gebe ich das ergebnis aus?
 
Werbung:

PLSQL_SQL

SQL-Guru
Beiträge
176
Du kannst aus deinem Script eine Stored (FIXE) Function machen und dein Ergebnis als Cursor, Array oder sowas Returnen.

Anschließend kannst du mit folgendem Stmt dein Result als SQL-Resultset ausgeben:

Select * from TABLE( MyFunction(Parameter1 , Parameter2, Parametern) );

Hoffe das Hilft!

@Nachtrag: Oder dir reicht die Ausgabe im Spool, siehe hier: https://www.datenbankforum.com/threads/sql-abfrage.625/

Ansonsten, poste bitte deinen Scriptcode. Danke und Lg
 
Oben