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