Professional Documents
Culture Documents
ch05 PLSQL PDF
ch05 PLSQL PDF
Bilgisayar Mhendislii
1 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
2 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
3 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
Kullanm alanlar
1. kurallarnn sakl yordam olarak barndrlmas : Yaplacak bir birim i,
birden ok tabloya ekleme veya gnleme ilemi ieriyor olabilir, ya da bir
sorgunun sonucuna gre yaplacak ileme karar verilebilecei gibi, sorgudan
alnacak parametrelerle ekleme ya da gnleme yaplabilir. Bu gibi durumlarda,
normal mantk ile, veri taban birden ok kere sorgulanmaldr. Yaplacak birim i
iin, veri tabanna birden ok balant kurulmas gerekecektir. Bu gibi durumlar
PL/SQL k ll l k l l bili Y l k t k bi b l t il il ili PL/SQL kullanlarak ele alnabilir. Yaplmas gereken, tek bir balant ile ilgili
PL/SQL yordamnn arlmasdr.
2. Veri taban olaylarnn tetiklenmesi : SEQUENCE ekleme ileminde direk
kullanlmas veya yabancl anahtar kstnn yetmedii durumlarda kstlarn
oluturulmas gibi amalarla kullanlabilirler.
4 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
5 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
6 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
Anonymous :
simsiz.
inline tanmlanr.
Uygulama alma zaman derlenir, yazldklar yerde
iletilirler. Uygulamann her altrlnda yeniden
derlenir.
Veri tabannda saklanmazlar / depolanmazlar Veri tabannda saklanmazlar / depolanmazlar.
Ayn bloun bakaca bir yerde altrlmas iin, ayn
kodun oraya da kopyalanmas gerekir. Zira altktan
sonra yok olurlar.
Subprograms
simleri ile gereken yerden arlabilirler.
Veri tabannda depolanrlar.
Her defasnda yeniden derlenmezler.
7 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
----------------------------------------------------------------------------------------------
/*
Uzun aklama satr
*/
SET SERVEROUTPUT ON
-- Aklama satr
DECLARE
vc_ISIM VARCHAR(20);
BEGIN
select ISIM into vc_ISIM from FIRMA where FIRMA_PK = 5;
DBMS_OUTPUT.PUT_LINE('5 nolu firmann ad : ' || vc_ISIM);
END;
----------------------------------------------------------------------------------------------
Ekrana kt yazdrma ilevinin SQL*Plus komutu olmas sebebiyle, bu kodu
SQL*Pl k ll k kl dik
8
SQL*Plus kullanarak rnekledik.
Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
9 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
10 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
11 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
lgili kolona iliikin veri taban kstlar yeni tanmlanan deikene uyarlanmaz.
rnein, NOT NULL olarak belirlenmi bir kolondan %TYPE ilecini kullanarak
retilen bir deikene NULL aktarlabilir.
----------------------------------------------------------------------------------------------
SET SERVEROUTPUT ON
DECLARE DECLARE
vc_ISIM FIRMA.ISIM%TYPE;
BEGIN
select ISIM into vc_ISIM from FIRMA where FIRMA_PK = 5;
DBMS_OUTPUT.PUT_LINE('5 nolu firmann ad : ' || vc_ISIM);
END; END;
---------------------------------------------------------------------------------------------
12 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
Derleme hatas olmakszn, firma tablosundaki tm satrlar silinecektir.
13 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
SET SERVEROUTPUT ON
DECLARE
today DATE:=SYSDATE;
tomorrow today%TYPE;
BEGIN
tomorrow:=today +1;
DBMS_OUTPUT.PUT_LINE(' Hello World ');
DBMS_OUTPUT.PUT_LINE('TODAY IS : '|| today);
DBMS_OUTPUT.PUT_LINE('TOMORROW IS : ' || tomorrow);
END;
14 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
DDL Data Definition Language CREATE TABLE, ALTER
TABLE, vs
DCL Data Control Language GRANT, REVOKE
15 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
Birden ok satrn ele alnmas gerektii durumlarda ileride bahsedilecek olan
explicit cursor yaps kullanlmaldr.
16 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
17 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
----------------------------------------------------------------------------------------------
DECLARE DECLARE
empno EMPLOYEES.EMPLOYEE_ID%TYPE := 100;
BEGIN
MERGE INTO copy_emp c
USING employees e
ON (e.employee_id = empno)
WHEN MATCHED THEN
UPDATE SET UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
c.phone_number = e.phone_number,
c.hire_date = e.hire_date,
c.job_id = e.job_id,
c salary = e salary c.salary = e.salary,
c.commission_pct = e.commission_pct,
c.manager_id = e.manager_id,
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e salary e commission pct e manager id
18
e.salary, e.commission_pct, e.manager_id,
e.department_id);
END;
----------------------------------------------------------------------------------------------
Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
SET SERVEROUTPUT ON
DECLARE DECLARE
empno employees.employee_id%TYPE :=110;
fname employees.first_name%TYPE ;
lname employees.last_name%TYPE ;
emp_sal employees.salary%TYPE ;
emp_number PLS_INTEGER;
avg_salary employees.salary%TYPE;
BEGIN
SELECT first_name, last_name, salary INTO fname, lname, emp_sal
FROM employees WHERE employee_id=empno;
DBMS_OUTPUT.PUT_LINE('Name: ' || fname || ' Soyad: ' || lname || ' Maa: ' || emp_sal);
UPDATE employees SET
first_name = 'Fatihq',
last_name = 'GLE',
salary = 1000 salary = 1000
WHERE
employee_id = empno;
DBMS_OUTPUT.PUT_LINE('After update...');
SELECT first_name, last_name, salary INTO fname, lname, emp_sal
FROM employees WHERE employee_id=empno;
DBMS OUTPUT PUT LINE('Name: ' || fname || ' Soyad: ' || lname || ' Maa: ' || emp sal);
19
DBMS_OUTPUT.PUT_LINE( Name: || fname || Soyad: || lname || Maa: || emp_sal);
Select COUNT(*), AVG(salary) INTO emp_number, avg_salary from employees
where manager_id IN (select manager_id from employees where employee_id =
110);
DBMS_OUTPUT.PUT_LINE(' Personel says: ' || emp_number || ' Ortalama maa: ' || avg_salary);
END;
Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
----------------------------------------------------------------------------------------------
DECLARE
myage number:=31;
BEGIN
IF myage < 11
THEN
DBMS_OUTPUT.PUT_LINE(' I am a child ');
ELSIF myage < 20 y g
THEN
DBMS_OUTPUT.PUT_LINE(' I am young ');
ELSIF myage < 30
THEN
DBMS_OUTPUT.PUT_LINE(' I am in my twenties');
ELSIF myage < 40
THEN THEN
DBMS_OUTPUT.PUT_LINE(' I am in my thirties');
ELSE
DBMS_OUTPUT.PUT_LINE(' I am always young ');
END IF;
END;
----------------------------------------------------------------------------------------------
20 Fatih Mehmet GLE
H.. Bilgisayar Mhendislii
a := NULL;
b := NULL;