Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_row_sql_generation

SQL Row Generatoren

Dual Tabelle mit Connect By

Vorlaufender Zähler:

-- vor 10g
 select level-1 
   from dual 
connect by level < 4
/
 
Level
-------
0
1
2
 
--ab 10g
 
SELECT rownum x
FROM   ( SELECT 1 as col
         FROM   dual
         CONNECT BY LEVEL <= 7
       )
X
---
1
2       
...
7

Problem: Bei größeren Mengen am Zeilen wird relativ viel PGA verbraucht und es kann zu einem Fehler kommen:

SQL>select count(*) from (select level from dual connect by level < 100000000);
                                        *
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:

WITH row_list AS (
  SELECT /*+ MATERIALIZE */ level AS id
  FROM   dual
  CONNECT BY level <= 10000
)
SELECT rownum AS id
FROM   row_list , row_list,row_list
WHERE  rownum <= 1000000;

Dual Tabelle mit CUBE

X Zeilen mit gleichen Wert erzeugen

Cube bilden (n hoch 2 pro cube Spalte )

SQL>select 1 from dual group by cube(1,2);
 
           1
------------
           1
           1
           1
           1

Rekursives SQL verwenden

11g

with v_nums(n) as (
     select 1 as n from dual
     union all
     select n+1 from v_nums where n < 3
 )
 select n from v_nums
/
 
 
          N
-----------
          1
          2
          3
 

zu Rekursive SQL siehe:


pipelined function

Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
"Autor: Gunther Pipperr"
prog/oracle_row_sql_generation.txt · Zuletzt geändert: 2016/10/17 12:13 von gpipperr