Oracle-Afisarea primelor n linii
Afisarea primelor n linii
La sfârşitul anului şcolar, dirigintele clasei vă roagă să-l ajutaţi să afle care sunt primii trei elevi din clasă, în ordinea descrescătoare a mediei generale, pentru a şti cui să dea premiile. Aşadar se pune problema ca la afişarea datelor dintr-o tabelă să afişaţi doar primele n linii.
Pentru aceasta veţi avea nevoie de pseudocoloana ROWNUM care returnează numărul de ordine al unei linii într-o tabelă. De exemplu comanda următoare va afişa codul, numele şi prenumele persoanelor împreună cu numărul de ordine al acestora în tabela persoane:
SELECT cod, nume, prenume, rownum
FROM persoane
rezultatul este cel din tabelul următor:
Deşi ne-am aştepta ca într-o comandă SELECT care foloseşte clauza ORDER BY, ROWNUM să ne afişeze numărul de ordine al înregistrărilor în ordinea dată de ORDER BY, acest lucru nu se întâmplă, numărul de ordine fiind cel din tabela iniţială. Observaţi în acest sens tabelul II.1.25 afişat la rularea comenzii următoare
select rownum, cod, nume, prenume,
localitate, firma, job, salariu
from persoane
order by salariu desc
Aşadar dacă dorim să afişăm primele 3 înregistrări din tabela iniţială vom putea scrie simplu:
SELECT cod, nume, prenume, rownum
FROM persoane
WHERE ROWNUM<=3
afişându-se rezultatul dorit (tabelul II.1.26.)
însă, pentru a afişa persoanele cu cele mai mici trei salarii, comanda următoare nu afişează ceea ce am dori, deaorece Oracle prima dată va returna primele trei înregistrări din tabela persoane şi abia apoi le va sorta:
select rownum, cod, nume, prenume,
localitate, firma, job, salariu
from persoane
where rownum<=3
order by salariu desc
comanda aceasta afişând:
Pentru a obţine rezultatul dorit de noi vom folosi o subinterogare astfel:
select *
from (select * from persoane
order by salariu)
where rownum<=3
În acest fel am forţat Oracle să sorteze mai întâi liniile şi apoi să afişeze primele trei linii din tabela obţinută.
Variabile
In Oracle se folosesc doua tipuri de variabile:
variabile asociate atributelor unei tabele
variabile de sistem: au urmatoarea forma generala:
:nume_de _variabila
Exemplu de utilizare:
Fie urmatorul tabel
sa se afiseze numele si prenumele angajatilor din orasul X. ( X va fi o variabila de sistem si valoarea ei va fi citita de la tastatura)
select nume, prenume,localitate
from persoane
where localitate=:X