Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

sql statements ausführen

Dieses Thema im Forum "Oracle" wurde erstellt von dabla, 27 April 2012.

  1. dabla

    dabla Neuer Benutzer

    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?
     
  2. dabla

    dabla Neuer Benutzer

    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.
     
  3. ukulele

    ukulele Datenbank-Guru

    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.
     
  4. dabla

    dabla Neuer Benutzer

    Hallo,
    kenne das EXCE Top nicht. Was tut das genau bzw wie meinst du das mit der Schleife. Bin leider noch kein SQL Spezi :)
     
  5. ukulele

    ukulele Datenbank-Guru

    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.
     
  6. Charly

    Charly Datenbank-Guru

    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
     
    Walter, ukulele und PLSQL_SQL gefällt das.
  7. dabla

    dabla Neuer Benutzer

    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?
     
  8. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    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: http://www.datenbankforum.com/threads/sql-abfrage.625/

    Ansonsten, poste bitte deinen Scriptcode. Danke und Lg
     
    Charly gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden