YZM 5560 PL/SQL ile VERİTABANI PROGRAMLAMA UYGULAMA #5 1. EMPLOYEE veritabanını kullanarak çalışanların isim, soyad, çalıştığı bölüm ve maaş bilgilerini table türündeki değişkenlerde tutan ve ayrı bir döngü yardımıyla ekrana yazdıran bir PL/SQL bloğu oluşturunuz. 2. EMPLOYEE veritabanını kullanarak kullanıcıdan bölüm ismi bilgisini alan ve o bölümde çalışanların isimlerini ve sözleşme tarihlerini table türündeki değişkenler aracılığıyla ekrana yazdıran bir PL/SQL bloğu oluşturunuz. 3. EMPLOYEE veritabanını kullanarak bölümler ile ilgili bilgileri record türünde değişken yardımıyla ekrana yazdıran bir PL/SQL bloğu oluşturunuz. 4. STUDENT veritabanını kullanarak Winter 2003 döneminde final notu olarak F alan öğrencilerin isimlerini table türündeki değişkende saklayan ve bu değişken yardımıyla ekrana yazdıran bir PL/SQL bloğu oluşturunuz. 5. STUDENT veritabanını kullanarak en yüksek üç kapasiteye sahip ofis olmayan odaları varray türünde bir değişkende tutan ve bu bilgiyi ekrana yazdıran bir PL/SQL bloğu oluşturunuz. 6. STUDENT veritabanını kullanarak Spring 2003 döneminde ders vermeyen öğretim üyelerinin isimlerini varray türünde bir değişkende tutan ve bu bilgiyi ekrana yazdıran bir PL/SQL bloğu oluşturunuz.
1. CURSOR çalışanlar IS SELECT fname,lname,deptname,salary FROM employee e, dept d WHERE e.deptid=d.deptid; TYPE adtür IS TABLE OF employee.fname%type INDEX BY TYPE soyadtür IS TABLE OF employee.lname%type INDEX BY TYPE bölümismitür IS TABLE OF dept.deptname%type INDEX BY TYPE maaştür IS TABLE OF employee.salary%type INDEX BY ad adtür; soyad soyadtür; bölümismi bölümismitür; maaş maaştür; FOR tane IN çalışanlar LOOP ad(say) := tane.fname; soyad(say) := tane.lname; bölümismi(say) := tane.deptname; maaş(say) := tane.salary; DBMS_OUTPUT.PUT_LINE(RPAD(ad(tane),10) RPAD(soyad(tane),10) RPAD(bölümismi(tane),10) maaş(tane)); Smith John Finance 265000 Roberts Sandi Finance 75000 Chen Sunny Finance 35000 McCall Alex InfoSys 66500 Dev Derek InfoSys 80000 Shaw Jinku Sales 24500 Garner Stanley Sales 45000 Houston Larry Marketing 150000
2. bölümisim dept.deptname%type := '&bölüm_isim_gir_ilk_harf_büyük'; CURSOR çalışanlar IS SELECT fname,lname,hiredate FROM employee WHERE deptid=(select deptid FROM dept WHERE deptname=bölümisim); TYPE adtür IS TABLE OF employee.fname%type INDEX BY TYPE soyadtür IS TABLE OF employee.lname%type INDEX BY TYPE tarihtür IS TABLE OF employee.hiredate%type INDEX BY ad adtür; soyad soyadtür; tarih tarihtür; FOR tane IN çalışanlar LOOP ad(say) := tane.fname; soyad(say) := tane.lname; tarih(say) := tane.hiredate; DBMS_OUTPUT.PUT_LINE(RPAD(ad(tane),10) RPAD(soyad(tane),10) tarih(tane)); Smith John 15-APR-60 Roberts Sandi 02-DEC-91 Chen Sunny 15-AUG-99
3. CURSOR bölümler IS SELECT * FROM dept; TYPE bölümbilgitür IS TABLE OF dept%rowtype INDEX BY bölümbilgi bölümbilgitür; FOR tane IN bölümler LOOP bölümbilgi(say).deptid := tane.deptid; bölümbilgi(say).deptname := tane.deptname; bölümbilgi(say).location := tane.location; bölümbilgi(say).employeeid := tane.employeeid; DBMS_OUTPUT.PUT_LINE(RPAD(bölümbilgi(tane).deptid,10) RPAD(bölümbilgi(tane).deptname,12) RPAD(bölümbilgi(tane).location,15) bölümbilgi(tane).employeeid); 10 Finance Charlotte 123 20 InfoSys New York 543 30 Sales Woodbridge 135 40 Marketing Los Angeles 246 TYPE bölümrec IS RECORD (bölümno dept.deptid%type,bölümad dept.deptname%type,bölümyer dept.location%type, bölümbaş dept.employeeid%type); CURSOR bölümler IS SELECT * FROM dept; TYPE bölümbilgitür IS TABLE OF bölümrec INDEX BY bölümbilgi bölümbilgitür; FOR tane IN bölümler LOOP bölümbilgi(say).bölümno := tane.deptid; bölümbilgi(say).bölümad := tane.deptname; bölümbilgi(say).bölümyer := tane.location; bölümbilgi(say).bölümbaş := tane.employeeid; DBMS_OUTPUT.PUT_LINE(RPAD(bölümbilgi(tane).bölümno,10) RPAD(bölümbilgi(tane).bölümad,12) RPAD(bölümbilgi(tane).bölümyer,15) bölümbilgi(tane).bölümbaş);
4. CURSOR kalanlar IS SELECT first, last FROM student WHERE studentid IN (SELECT studentid FROM registration WHERE csid IN (SELECT csid FROM crssection WHERE termid = (SELECT termid FROM term WHERE UPPER(termdesc)='WINTER 2003')) AND final = 'f'); TYPE kalanadtür IS TABLE OF student.first%type INDEX BY TYPE kalansoyadtür IS TABLE OF student.last%type INDEX BY kalanad kalanadtür; kalansoyad kalansoyadtür; FOR tane IN kalanlar LOOP kalanad(say) := tane.first; kalansoyad(say) := tane.last; DBMS_OUTPUT.PUT_LINE(RPAD(kalanad(tane),10) kalansoyad(tane)); Jose Diaz
5. CURSOR odalar IS SELECT building,roomno,capacity FROM (SELECT * FROM location WHERE roomtype <> 'O' ORDER BY capacity DESC) WHERE ROWNUM <= 3; TYPE binatür IS VARRAY(3) OF location.building%type; TYPE odanotür IS VARRAY(3) OF location.roomno%type; TYPE kapasitetür IS VARRAY(3) OF location.capacity%type; bina binatür := binatür(); odano odanotür := odanotür(); kapasite kapasitetür := kapasitetür(); say INTEGER := 0; FOR tane IN odalar LOOP bina.ext bina(say) := tane.building; odano.ext odano(say) := tane.roomno; kapasite.ext kapasite(say) := tane.capacity; DBMS_OUTPUT.PUT_LINE(RPAD(bina(tane),10) RPAD(odano(tane),10) kapasite(tane)); Kennedy 204 50 Nehru 301 50 Nehru 309 45
6. CURSOR hocalar IS SELECT name FROM faculty WHERE facultyid NOT IN (SELECT DISTINCT facultyid FROM crssection WHERE termid = (SELECT termid FROM term WHERE LOWER(termdesc)='spring 2003') AND facultyid IS NOT NULL); TYPE hocaisimtür IS VARRAY(10) OF faculty.name%type; isim hocaisimtür := hocaisimtür(); say INTEGER := 0; FOR tane IN hocalar LOOP isim.ext isim(say) := tane.name; DBMS_OUTPUT.PUT_LINE(isim(tane)); Williams Vajpayee Collins Sen Rivera Chang