| |
 |
PLSQL
|
SELECT musi vratit prave jeden radek!!, jinak program vyhodi vyjimku. Vysledky jsou prirazeny do odpovidajich promennych.
- SELECT vyrazy
- INTO promenne
- FROM
Pri psani PLSQL programu v SQL+ se prikazy odeslou az v okamziku potrzeni "/enter". Neoveruje syntaxi, o to se stará server. Vrací příznak značící, zda script proběhl bez chyb.
Výhoda je, že veškeré operace jsou vykonávány na serveru, tzn. ušetří se trafic mezi klientem a serverem.
Server obsahuje několikero základních funkcí:
- DBMS_OUTPUT.PUT_LINE('text')
- vypíše text na obrazovku konzole. Aby se objevil, tak je třeba nastavit proměnou SERVEROUTPUT na ON (Příkaz SET).
- Blbý je, že veškerý výstup je vysypán uživateli až po ukončení scriptu ... najednou
Příklad, který vypíše 20,1,2,...,10:
declare i number; begin i := 20; dbms_output.put_line(i); for i in 1..10 loop dbms_output.put_line(i); end loop; end;
FOR r IN (SELECT * FROM osoba) LOOP ...... END LOOP;
Příklad využití PLSQL na zjištění věku z rodného čísla. Není to dokonalé, ale poskytuje to alespoň náznak použití.
DECLARE
-
r osoba.vek%TYPE
-
d DATE;
-
m NUMBER;
BEGIN
-
FOR r in (SELECT rc, vek FROM OSOBA) LOOP
-
IF substr(r.rc, 3, 1) IN ('0', '1')
-
THEN d:= to_date(substr(r.rc, 1,6), 'yymmdd'); -- je to chlap
-
ELSE m:= to_number(substr(r.rc,3,2)) - 50; -- je to zenska
-
d:= to_date(substr(r.rc, 5, 2) || '.' ||m||'.'||substr(r.rc, 1, 2), 'dd.mm.yy');
-
END IF; -- v date mame datum narozeni
-
v := trunc(months_between(d, sysdate) / 12);
-
UPDATE osoba SET vek = v WHERE rc=r.rc;
-
END LOOP;
END; |
|
| |
 |
Sekvence
|
Všechny sekvence jsou uloženy v tabulce user_sequences, kde se dozvíme, rozsah, způsob generování sekvence, názvy atd.
CREATE sequence jmeno
- vytvoří sekvenci čísel od 1 do infinity
- INCREMENT_BY pocet -- o kolik se zvyšuje číselník
- START_WITH pocet -- na jakem cisle se zacne
- MINVALUE pocet
- MAXVALUE pocet
- CYCLE / NONCYCLE -- zda se generovana cisla muzou po pretoceni začít opakovat
- NOCACHE / CACHE pocet -- kolik si server dopředu vygeneruje čísel
DROP sequence jmeno
Máme-li sekvenci vytvořenou, pak pro manipulaci se sekvencemi používáme tyto dvě funkce:
- jmeno_sekv.currval -- vrátí poslední přidělené číslo sekvence jmeno_sekv
- jmeno_sekv.nextval -- vrátí další číslo v sekvenci
|
|