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

Ergebnis einer WITH Anweisung als Tabelle anlegen

Dieses Thema im Forum "Oracle" wurde erstellt von shellycooper, 11 Juli 2016.

  1. shellycooper

    shellycooper Benutzer

    Guten Morgen :)

    mich plagt ein Problem: ich habe eine rekursive Abfrage welche mit WITH beginnt und deren Ergebnis ich gerne als Tabelle abspeichern würde. Ich will also einfach create table xxx as( With...); schreiben. Das geht nicht da Qracle WITH Anweisungen nicht in Klammern setzen kann. Ohne Klammer läuft es zwar, aber das Ergebnis ist nicht das selbe wie wenn die Abfrage ausgeführt wird. Das Ergebnis kann ich als Excel exportieren und dann in eine Tabelle importieren...es wäre nur gut wenn jemand einen Direkten weg wüsste.

    ich will mit den Daten dann in einem Cursor weiterarbeiten

    Besten Dank!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    geht folgendes unter Oraggle?

    Code:
    test=# create table bla as (with x as (select * from generate_series(1, 5) s) select * from x);
    SELECT 5
    test=# select * from bla;
     s
    ---
     1
     2
     3
     4
     5
    (5 rows)
    
    test=#
    
     
  3. shellycooper

    shellycooper Benutzer

    leider nein. Der Developer lässt mich keine Tabelle mit WITH in Klammer anlegen:

    SQL-Fehler: ORA-32034: Nicht unterstützte Benutzung von WITH-Klausel
    32034. 00000 - "unsupported use of WITH clause"
    *Cause: Inproper use of WITH clause because one of the following two reasons
    1. nesting of WITH clause within WITH clause not supported yet
    2. For a set query, WITH clause can't be specified for a branch.
    3. WITH clause cannot be specified within parenthesis.
    *Action: correct query and retry
     
  4. akretschmer

    akretschmer Datenbank-Guru

    möglicherweise geht das nur in PostgreSQL. Es gab zuerst die CTE (Common Table Expressions) und später die wCTE, w für 'writeable'. Damit kann das Resultat von WITH-Anweisungen schreibend verwendet werden. Ist aber mittlerweile schon etliche Jahre bzw. Versionen so machbar. Vielleicht irgendwann auch mal in Oraggle ...
     
  5. unficyp

    unficyp Fleissiger Benutzer

    Bledsinn.

    Code:
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL> create table lallo
      2  as
      3  with q
      4  as
      5  (
      6      select    1
      7      from    dual
      8  )
      9  select * from q ;
    
    Table created.
    
    SQL> select * from lallo;
    
             1
    ----------
             1
    
    SQL>
    
    Edit:
    überlesen: das Ergebnis ist ohne Klammern nicht gleich ?
    Versteh ich nicht.
     
    Zuletzt bearbeitet: 11 Juli 2016
    akretschmer gefällt das.
  6. ukulele

    ukulele Datenbank-Guru

    Eventuell geht auch
    Code:
      with q
      as
      (
    select 1
    from dual
      )
    create table lallo
    as
    select * from q ;
     
  7. unficyp

    unficyp Fleissiger Benutzer

    nein, nach dem with muss ein select kommen.
     
  8. Hubertus

    Hubertus Fleissiger Benutzer

    Ich kenne:
    CREATE TABLE xxx ...;
    INSERT INTO xxx ... WITH ...;
     
  9. shellycooper

    shellycooper Benutzer

    wenn ich ein count(*) from with...
    und ein count auf die angelegte Tabelle ohne Klammern mache bekomme ich ca. 30% weniger Zeilen. Da es im Original etwa 2,2 Mio sind ist die Validierung da etwas kompliziert. Aber wahrscheinlich übersehe ich mal wieder eine Kleinigkeit (Oracle hat immer recht! :)

    ich versuche mal nur den Insert statt dem Create.
     
  10. unficyp

    unficyp Fleissiger Benutzer

    poste mal beide statements bitte, am besten mit sqlplus ausgabe bei den count(*)
     
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