Aşağıdaki örnekte bir update işlemi yapılmakta ve update işleminin durumuna göre ouput'a bilgi basılmaktadır :
declare
affected number(2);
begin
update employees set salary=salary+10 where employee_id=100;
IF SQL%FOUND THEN
affected:=SQL%ROWCOUNT;
dbms_output.put_line('updated : ' || affected);
ELSIF SQL%NOTFOUND THEN
dbms_output.put_line('not updated');
END IF;
end;
/
update işlemi çalıştıktan sonra herhangi bir kayıt etkilenmiş ise SQL%FOUND ifadesi true döndürür ve SQL%ROWCOUNT ile etkilenen kayıt sayısı alınabilir. Eğer etkilenen kayıt yok ise SQL%FOUND false ve SQL%NOTFOUND true döndürür.
Aşağıdaki örnek, employees tablosundaki satırların ad ve soyadlarını birleştirip output'a basmaktadır. Cursor kullanılmakadır.
declare
cursor c1 is select * from employees;
v_employees employees%ROWTYPE;
begin
open c1;
loop
fetch c1 into v_employees;
exit when c1%NOTFOUND;
dbms_output.put_line(v_employees.first_name || ' ' || v_employees.last_name);
end loop;
close c1;
end;
/
Declare bölümünde c1 cursor'u tanımlanmıştır ve tüm employees tablosu alınmaktadır. v_employees ise bir employees satırını tutacak değişkendir (bu değişkene fetch edilecektir). Kod bölümünde önce open c1 şeklinde cursor açılır ve satırlar loop için v_employees değişkenine fetch c1 into v_employees ile doldurulur (fetch). Eğer satır var ise oputput'a ad soyad basılır. Loop sonunca cursor kapatılmalıdır.
Tüm satırı almak yerine sadece ad ve soyad bilgileri alınabilir. Aşağıdaki örnek bunu yapmaktadır:
declare
cursor c1 is select first_name,last_name from employees;
v_firstname employees.first_name%TYPE;
v_lastname employees.last_name%TYPE;
begin
open c1;
loop
fetch c1 into v_firstname,v_lastname;
exit when c1%NOTFOUND;
dbms_output.put_line(v_firstname || ' ' || v_lastname);
end loop;
close c1;
end;
/
Bu örnekte tüm satırın bir değişkene atanması yerine sadece kullanılan değerler atanmıştır.