Sunteți pe pagina 1din 4

Probleme de rezolvat Seciunea 5 partea 2

S5L4 E2

Scriei un bloc PL/SQL care s afieze numele rii i suprafaa (country_name i area) pentru
toate rile dintr-o numit regiune. Id-ul regiunii ar trebui s fie transmis cursorului ca
parametru. Testai blocul scris pentru dou regiuni: (region_id=5 South America i
region_id=30 Eastern Asia). Nu folosii cursorul n bucl FOR.

S5L4 E3

Modificai codul de la problema precedent folosind de aceast dat cursorul n bucl FOR.
Trebuie s declarai n continuare cursorul n zona declarativ a blocului. Testai codul pentru
aceleai regiuni.

S5L4 E4

Modificai codul de la problema precedent (S5L4 E3) pentru a afia numele rii i
suprafaa pentru toate rile dintr-o anumit regiune care au suprafaa mai mare dect o
anumit valoare. Id-ul regiunii i suprafaa trebuie s fie transmise cursorului ca parametri.
Testai blocul pentru dou seturi de valori: region_id=5 i area=200000 i region_id=5 i
area=1000000.

S5L4 EE

Modificai codul de la problema anterioar (S5L4 E4) pentru a extrage i afia dou seturi
de ri ntr-o singur execuie a blocului. Trebuie s deschidei i s nchidei cursorul de dou
ori, de fiecare dat transmind alte valori pentru parametri. nainte de a afia nregistrrile din
cursor afiai textul: Regiunea: .. Suprafaa minim: de exemplu, Regiunea:5
Suprafaa minim: 20000. Testai codul pentru seturile de valori: (5, 200000) i (30, 500000).

S5L5 E1

n exerciiile din lecia 5 vei folosi comenzile INSERT i UPDATE pe un nou tabel intitulat
mariri_propuse (proposed_raises), care va conine detalii despre mririle de salarii pentru angajaii
care ndeplinesc anumite condiii. Creai acest tabel executnd urmtorul cod:

CREATE TABLE proposed_raises


(date_proposed DATE,
date_approved DATE,
employee_id NUMBER(6),
department_id NUMBER(4),
original_salary NUMBER(8,2),
proposed_new_salary NUMBER(8,2));

Scriei un bloc PL/SQL care insereaz o nregistrare n tabela proposed_raises pentru fiecare
angajat care ndeplinete condiiile impuse (salariul lor este mai mic dect o anumit valoare).
Valoarea salariului este transmis cursorului ca parametru. Pentru fiecare salariat care se
calific pentru mrire, se insereaz n tabela proposed_raises urmtoarele date: date_proposed =
data curent, date_appoved va fi null i proposed_new_salary va fi cu 5% mai mare dect salariul
curent. Cursorul trebuie s blocheze nregistrrile tabelei employees pentru ca nimeni s nu
modifice datele din tabel atta timp ct cursorul este deschis. Testai codul folosind ca valoare
pentru salariu, valoarea 5000.

S5L5 E2

Executai o instruciune SELECT asupra tabelei proposed_raises pentru a vedea rezultatul codului
anterior. Ar trebui ca tabelul s conin 6 nregistrri. Dac executai codul de la prima problem
de mai mult erori, asigurai-v c de fiecare dat golii tabela nainte de fiecare test

SELECT * FROM proposed_raises;

[ DELETE FROM proposed_raises; ]

S5L5 E3

nainte de a ncepe acest exerciiu asigurai-v c n tabela proposed_raises sunt 15 nregistrri.


Imaginai-v acum faptul c aceste propuneri de mriri de salariu au fost aprobate de ctre
conducerea companiei.

A. Scriei un bloc PL/SQL pentru a citi fiecare nregistrare din tabela proposed_raises.
Pentru fiecare nregistrare actualizai coloana date_approved cu data curent. Folosii
clauza WHERE CURRENT OF pentru a actualiza fiecare nregistrare.

B. executai o instruciune SELECT asupra tabelei proposed_raises pentru a vedea datele


modificate.

C. Conducerea a decis acum c angajaii din departamentul 50 nu pot beneficia de aceast


mrire. Modificai codul de la problema 3 astfel nct s tergei din tabela poposed_raises
angajaii din departamentul 50. Acest lucru poate fi fcut printr-o simpl instruciune
DELETE, dar trebuie rezolvat folosind un cursor cu clauza FOR UPDATE. Testai codul
i verificai din nou tabela proposed_raises. n aceast tabel ar trebui s rmn doar 9
nregistrri.
S5L6 E1

Scriei i executai un bloc PL/SQL care va afia toate departamentele i angajaii din fiecare
departament n parte. Folosii tabelele employees i departments. ntr-un cursor n bucl FOR,
extragei i afiai id-ul i denumirea departamentului (department_id i department_name) pentru
fiecare departament. Sub denumirea departamentului afiai o linie punctat de genul _ _ _ _ _ _ _
. ntr-o sub-bucl FOR afiai numele, prenumele i salariul (first_name, last_name i salary)
fiecrui angajat din departamentul respectiv, urmat de o linie goal la sfritul fiecrui
departament. Ordonai departamentele dup id, iar angajaii dup nume.
Va trebui s declarai 2 cursoare. Unul pentru afiarea departamentelor i unul pentru afiarea
angajailor din fiecare departament folosind id-ul departamentului ca parametru. Rezultatul ar
trebui s arate ca mai jos:

10 Administration
-----------------------------
Jennifer Whalen 4400
20 Marketing
-----------------------------
Pat Fay 6000
Michael Hartstein 13000
50 Shipping
-----------------------------
Curtis Davies 3400
Randall Matos 2600
Kevin Mourgos 5800
Trenna Rajs 3500
Peter Vargas 2500

S5L6 E2

Scriei un bloc PL/SQL care va afia regiunile i rile din fiecare regiune n parte. Vei folosi
dou cursoare. Un cursor ntr-o bucl principal care va afia regiunile (regions) i o sub-bucl
pentru a extrage i afia nregistrrile din tabela countries (country_name, area i population)
transmind ca parametru id-ul regiunii. Afiai numai regiunile care cuprind n denumire
America (region_name LIKE %America%). Ordonai datele afiate dup numele regiunii,
iar n cadrul fiecrei regiuni ordonai datele dup denumirea rii. Datele afiate ar trebui s
arate ca mai jos:

13 Central America
-----------------------------
Belize 22966 287730
Republic of Costa Rica 51100 4075261
Republic of El Salvador 21040 6822378
Republic of Guatemala 108890 12293545
Republic of Honduras 112090 7326496

Republic of Nicaragua 129494 5570129


Republic of Panama 78200 3191319
United Mexican States 1972550 107449525
21 Nothern America
-----------------------------
Bermuda 53 65773
Canada 9984670 33098932
Greenland 2166086 56361
Territorial Collectivity of Saint Pierre and Miquelon 242 7026
United States of America 9631420 298444215

S5L6 EE

Modificai codul de la exerciiul 2 astfel nct s afiai i limbile oficiale vorbite n fiecare ar.
Vei avea nevoie de 3 cursoare i 3 bucle. Primele 2 bucle vor extrage i afia regiunile i rile ca
la exerciiul 2. Ultima sub-bucl va trebui s primeasc id-ul rii ca parametru i s extrag i s
afieze numele fiecrei limbi oficiale folosind uniunea ntre tabelele wf_spoken_languages i
wf_languages. n cadrul fiecrei ri, limbile vor trebui ordonate alfabetic. Testai blocul doar cu
regiunile din America.
Rezultatele obinute ar trebui s arate ca mai jos:

13 Central America
-----------------------------
Belize 22966 287730
--- English
Republic of Costa Rica 51100 4075261
--- Spanish
Republic of El Salvador 21040 6822378
Republic of Guatemala 108890 12293545
Republic of Honduras 112090 7326496
Republic of Nicaragua 129494 5570129
--- Spanish
Republic of Panama 78200 3191319
--- Spanish
United Mexican States 1972550 107449525
21 Nothern America
-----------------------------
Bermuda 53 65773
--- English
Canada 9984670 33098932
--- English
--- French
Greenland 2166086 56361
Territorial Collectivity of Saint Pierre and Miquelon 242 7026
--- French
United States of America 9631420 298444215
--- English