streda, 18 február 2015 09:54 Written by 2987 times
Rate this item
(4 votes)

SQL - generovanie rôznych zoznamov pomocou SQL dotazu

Zdravím databázových programátorov.
Dnes si ukážeme zopár malých príkladov, ako vygenerovať jednoduché zoznamy čísel, dátumov, časov a písmen (abecedy). Tieto zoznamy sú generované pomocou SQL príkazov bez pomoci čítania dát z tabuľky.


Na generovanie použijeme príkaz SQL "CONNECT BY", ktorý sa využíva hlavne pri generovaní hierarchických dotazov - dotazov s riadkami prepojených pomocou tzv. "parent" a "child" riadkov, potom pseudostľpec "LEVEL", ktorý v tomto prípade využívame na čítanie inkrementovanej hodnoty do splnenia podmienky - "CONNECT BY LEVEL <= 10". Ďalej využijeme pomocnú tabuľku "DUAL", ktorá obsahuje jeden riadok s jednou hodnotou a využíva sa na zobrazovanie akýchkoľvek vymyslených/generovaných hodnôt/hodnoty pre rôzne účely. Pomocou dole uvedených dotazov si vygenerujeme zoznamy pre rôzne účely. Hodnoty týchto záznamov sú dynamicky generované - nie su uložené v žiadnej užívateľskej tabuľke.

 

Príklady: 

 

-- zoznam čísel od 1 do 10
SELECT LEVEL AS "NUMBER" FROM DUAL CONNECT BY LEVEL <= 10;

 

-- zoznam 5 minútových intervalov 
SELECT TO_CHAR(TRUNC(SYSDATE)+LEVEL/288,'HH24:MI:SS') 
AS "TIME" FROM DUAL CONNECT BY LEVEL <= 288;

 

-- zoznam 10 minútových intervalov
SELECT TO_CHAR(TRUNC(SYSDATE)+LEVEL/144,'HH24:MI:SS') 
AS "TIME" FROM DUAL CONNECT BY LEVEL <= 144;

 

-- zoznam hodinových intervalov
SELECT TO_CHAR(TRUNC(SYSDATE)+LEVEL/24,'HH24:MI:SS') 
AS "TIME" FROM DUAL CONNECT BY LEVEL <= 24;

 

-- kalendár dní aktuálneho mesiaca
SELECT TO_CHAR(TRUNC(SYSDATE,'MM')+LEVEL-1,'DD.MM.YYYY') 
AS "DATE" FROM DUAL CONNECT BY LEVEL
 <= TO_NUMBER(TO_CHAR(LAST_DAY(SYSDATE),'DD'));

 

-- abeceda 
SELECT CHR(LEVEL+64) AS "LETTER" FROM DUAL CONNECT BY LEVEL <= 26;

 

S pozdravom Alojz Benďák

Last modified on piatok, 20 február 2015 08:56
Alojz Benďák

Autor je administrátor webu a venuje sa programovaniu takmer 23 rokov.

  • prvý kontakt s počítačmi na strednej škole - PMD 1,2,3, PP06, Atari, Sinclair (programovanie v jazyku: strojový kód, basic a pascal):  2 roky
  • na VŠ - jazyky Turbo pascal a Turbo C: 1rok
  • programovanie databázového ekonomického širokoškálneho software v Delphi a C++ Borland (databázy Paradox): 8 rokov v Codex s.r.o. Nitra
  • programovanie webových aplikácií na databázach MySQL a MS SQL server: 1 roky na živnosť (firmy: Hermes Nitra, Schindler v Bratislave)
  • pracoval ako DBA v Homecredit Brno a vo VÚB Bratislava ako vyvojár + optimalizácie v SQL a PL/SQL na Oracle 11g (firma Accenture)
  • programoval programy pre súkromné firmy pre HW na skenovanie povrchov nádrží pre skladovanie tekutých palív (pristroj Leica)
  • momentálne pracuje ako DBA pod Oracle 11g a ako vyvojár vnútropodnikových databázových aplikacií v PHP, SQL, C++, C# a interface v PL/SQL: 11 rokov
  • ďalej programuje s HTML, CSS, Ajax, Javascript, VBA, MS visual C++ a C# malé podporné aplikácie
  • certifikát SQL expert for Oracle 11g   
  • spolupracuje a aktívne učí pre počítačové firmy: Lapis, IVIT v Nitre