Ergebnis einer WITH Anweisung als Tabelle anlegen

shellycooper

Benutzer
Beiträge
6
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!
 
Werbung:
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=#
 
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
 
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 ...
 
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:
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.

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.
 
Werbung:
Zurück
Oben