prog:oracle_row_sql_generation
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
prog:oracle_row_sql_generation [2016/01/22 10:16] – [Dual Tabelle mit CUBE] gpipperr | prog:oracle_row_sql_generation [2016/10/17 12:13] (aktuell) – [Dual Tabelle mit Connect By] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====SQL Row Generatoren ===== | ||
+ | |||
+ | ==== Dual Tabelle mit Connect By ==== | ||
+ | |||
+ | Vorlaufender Zähler: | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | -- vor 10g | ||
+ | | ||
+ | from dual | ||
+ | connect by level < 4 | ||
+ | / | ||
+ | |||
+ | Level | ||
+ | ------- | ||
+ | 0 | ||
+ | 1 | ||
+ | 2 | ||
+ | |||
+ | --ab 10g | ||
+ | |||
+ | SELECT rownum x | ||
+ | FROM ( SELECT 1 as col | ||
+ | | ||
+ | | ||
+ | ) | ||
+ | X | ||
+ | --- | ||
+ | 1 | ||
+ | 2 | ||
+ | ... | ||
+ | 7 | ||
+ | |||
+ | </ | ||
+ | |||
+ | Problem: Bei größeren Mengen am Zeilen wird relativ viel PGA verbraucht und es kann zu einem Fehler kommen: | ||
+ | <code bash> | ||
+ | |||
+ | SQL> | ||
+ | * | ||
+ | FEHLER in Zeile 1: | ||
+ | ORA-30009: Nicht genügend Speicher für CONNECT BY-Vorgang | ||
+ | |||
+ | </ | ||
+ | |||
+ | Lösung: PGA entsprechend groß einstellen ( 5GB reichen für obiges Beispiel nicht!) | ||
+ | |||
+ | |||
+ | Alternativ: Temporary Table: | ||
+ | <code sql> | ||
+ | WITH row_list AS ( | ||
+ | SELECT /*+ MATERIALIZE */ level AS id | ||
+ | FROM dual | ||
+ | CONNECT BY level <= 10000 | ||
+ | ) | ||
+ | SELECT rownum AS id | ||
+ | FROM | ||
+ | WHERE rownum <= 1000000; | ||
+ | |||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Dual Tabelle mit CUBE ==== | ||
+ | |||
+ | X Zeilen mit gleichen Wert erzeugen | ||
+ | |||
+ | Cube bilden (n hoch 2 pro cube Spalte ) | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | SQL> | ||
+ | |||
+ | 1 | ||
+ | ------------ | ||
+ | 1 | ||
+ | 1 | ||
+ | 1 | ||
+ | 1 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Rekursives SQL verwenden ==== | ||
+ | **11g** | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | with v_nums(n) as ( | ||
+ | | ||
+ | union all | ||
+ | | ||
+ | ) | ||
+ | | ||
+ | / | ||
+ | |||
+ | |||
+ | N | ||
+ | ----------- | ||
+ | 1 | ||
+ | 2 | ||
+ | 3 | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | zu Rekursive SQL siehe: | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ====pipelined function ==== | ||
+ | |||
+ | Dazu siehe [[prog: | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Quellen ===== | ||
+ | |||
+ | * http:// | ||
+ | * http:// |
prog/oracle_row_sql_generation.txt · Zuletzt geändert: 2016/10/17 12:13 von gpipperr