Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Podzapytania rekurencyjne z sortowaniem

Początkowo nie widziałem bardziej eleganckiego rozwiązania niż stworzenie tymczasowej tabeli.

Zastanawiałem się, co to za niezręczny dialekt SQL Oracle:

  1. Dlaczego nie JEŚLI TABELA ISTNIEJE USUŃ TABELĘ?
  2. Dlaczego muszę wykonać polecenie WYKONAJ NATYCHMIAST z ciągiem? Dlaczego nie mogę po prostu samodzielnie wykonać DROP TABLE TEMP?
  3. Dlaczego nie mogę użyć polecenia ORDER BY bez zagnieżdżania w nawiasach w ANCHOR?
  4. Dlaczego nie mogę mieć ORDER BY przy rekurencyjnym SELECT po UNION ALL?
  5. SQL Z wymaga standaryzacji. Inne dialekty bazy danych nie wymagają umieszczania nazw kolumn w nawiasach w instrukcji WITH. Jeśli tego nie zrobisz, pojawi się jakiś bezsensowny błąd ALIAS w punkcie łączenia rekurencyjnego po UNION ALL.
  6. Paginacja:zobacz tutaj BEZ LIMITU / PRZESUNIĘCIA
DECLARE v_c NUMBER;BEGINSELECT COUNT(*) INTO v_c FROM user_tables WHERE TABLE_NAME ='TEMP';IF v_c =1 THEN NATYCHMIASTOWE WYKONANIE 'DROP TABLE TEMP';END IF;END;CREATE TABLE TEMP AS (SELECT * FROM ( WYBIERZ JOBMST_ID, JOBMST_NAME, JOBMST_PRNTID, JOBMST_TYPE FROM TIDAL.JOBMST GDZIE JOBMST_PRNTID NIE JEST NULL ORDER BY JOBMST_PRNTID, JOBMST_NAME)); JOBMST_NAME, JOBMST_PRNTID, JOBMST_TYPE, 1 FROM TIDAL.JOBMST GDZIE JOBMST_PRNTID JEST ZAMÓWIENIEM NULL WEDŁUG JOBMST_NAME )UNION ALLSELECT J2.JOBMST_ID, J2.JOBMST_NAME, J2.JOBMST_PRNTID, J2ST. =J1.JOBMST_IDGDZIE J2.JOBMST_PRNTID NIE JEST NULL)GŁĘBOKOŚĆ WYSZUKIWANIA NAJPIERW WEDŁUG JOBMST_ID SET DISP_SEQSELECT *FROM J1ORDER BY DISP_SEQ; 

Następnie (mathguy na Oracle Community Forum) wskazał mi, że moja GŁĘBOKOŚĆ WYSZUKIWANIA powinna być właśnie przy JOBMST_NAME.

Wtedy wszystko się układa:

<>Z J1(ID_JOBMST,NAZWA_JOBMST_JOBMST_PRNTID,TYP_JOBMST,LVL) AS (WYBIERZ ID_JOBMST,NAZWA_JOBMST,JOBMST_PRNTID,TYP_JOBMST,1 FROM TIDAL.JOBMST WHERE ID_JOBMST_JOBMST_PR2. JOBMST_PRNTID, J2.JOBMST_TYPE, J1.LVL + 1FROM TIDAL.JOBMST J2INNER JOIN J1 ON J2.JOBMST_PRNTID =J1.JOBMST_IDWHERE J2.JOBMST_PRNTID NIE JEST NULL) PIERWSZY GŁĘBOKOŚĆ WYSZUKIWANIA WEDŁUG JOBMST_PRNT_NAME USTAWIENIE DIAGNOSTYKI JOBMST_1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Metoda gromadzenia:funkcja COUNT w bazie danych Oracle

  2. Wybierz z tabeli, znając tylko datę bez czasu (ORACLE)

  3. Sposób na sprawdzenie gotowego sql . Oracle

  4. Czy istnieje oficjalna rekomendacja Oracle dotycząca używania jawnych złączeń ANSI JOIN w porównaniu ze złączeniami niejawnymi?

  5. ORA-03113:koniec pliku na kanale komunikacyjnym