Oracle PL/SQL bloklarında kullanılan bir veri yapısı türüde “kayıt” yani “record” olarak isimlendirilmektedir.Bir kayıt birbirleriyle ilişkili alanların bir arada tanımlanması ile oluşturulur. Kayıtın bir adı vardır. Ayrıca tıpkı PL/SQL tablolarında olduğu gibi, bir indeks yardımıyla kayıtlara ulaşılır. Kayıtın her bir alanı farklı veri türüne sahip olabilir.
Kayıt Türünün Tanımlanması
PL/SQL kayıt türünün oluşturulması amacıyla, blokların DECLARE bloğu için bir tanım yapılması gerekmektedir. Kayıt türlerinin yaratılabilmesi için öncelikle aşağıda görüldüğü biçimde bir tür tanımı yapılmalıdır.
- TYPE [kayıt_türü_adı] IS RECORD (alan tanımları);
Burada ki alan tanımları için bilinen pl/sql değişken tanımlama ile yapılmaktadır. Ama benim Oracle için en sevdiğim özelliklerden biri olan %TYPE ile tanımlaması, oluşturduğunuz record ile veri tabanı kolonları arasında çok güzel bir ilişki oluyor
Örnek:
Aşağıda bir PL/SQL kayıt türü tanımlanmaktadır. Bu kayıt, p_no, p_adi ve p_ucret gibi üç alandan oluşmaktadır. Bu kayıt türünün adı per_kayit_turu olarak belirlenmiştir.
DECLARE
TYPE per_kayit_turu IS RECORD (
p_no NUMBER(3),
p_adi VARCHAR2(15),
p_ucret NUMBER );
BEGIN
--
END;
Bu tanım içindeki alan türleri, bir diğer değişkenden ya da bir veri tabanı tablosunun alanlarından alınabilir. Böyle bir amaç için %TYPE anahtar kelimesini kullanıyoruz. Aşağıdaki örnek, kaydın alanlarına ait veri türlerinin personel tablosundan kopyalandığını göstermektedir:
DECLARE
TYPE per_kayit_turu IS RECORD (
p_no personel.personel_no%TYPE, -- harika
p_adi personel.adi%TYPE,
p_ucret personel.ucret_no%TYPE );
BEGIN
--
END;
Kaydın Tanımlanması
RECORD anahtar kelimesi kullanılarak alan türü tanımlandıktan sonra bu türe dayanarak bir kaydın yaratılması gerekmektedir. Bunun için, yine DECLARE bloğu içinde aşağıda görüldüğü biçimde bir kayıt tanımlanır:
Aşağıdaki blok içinde önce bir kayıt türü tanımlıyoruz ve ardından bu türe dayanarak per_kayit isimli bir kayıt yaratıyoruz.
DECLARE
TYPE per_kayit_turu IS RECORD (
p_no NUMBER(3),
p_adi VARCHAR2(15),
p_ucret NUMBER);
per_kayit per_kayit_turu;
BEGIN
--
END;
Kayıtların Kullanılması
Kayıtlar bu şekilde tanımlandıktan sonra, bu kayıtların içerdiği alanlara erişim söz konusudur. Kaydın her bir alanına, o alanın ismi kullanılarak erişilir. Bunun için şu şekilde bir tanım kullanılır:
Alan isimleri bu şekilde kullanılarak, bu alanlara değer atanabilir veya gerektiğinde PL/SQL bloğunun içinde kullanılabilir. Kayıt alanlarına blok içinde doğrudan değerler atanabileceği gibi, gerektiğinde veri tabanı tablolarından da veri okunarak aktarılabilir.
Bir kayıt tanımlandıktan sonra bu kaydın alanlarına değerler kaydetmek ve ardından bu kaydın her bir alanının içeriğini görüntülemek istiyoruz.
--kayıt türü tanımlanıyor
TYPE per_kayit IS RECORD
(per_no NUMBER(3),
p_adi VARCHAR2(15),
p_ucret NUMBER );
--kayıt tanımlanıyor..
per_kayit per_kayit_turu;
BEGIN
-- alanlara bilgi atanıyor
per_kayit.per_no := 305;
per_kayit.p_adi := 'GOKALP';
per_kayit.p_ucret := 6650;
--alanlardaki bilgiler görüntüleniyor
DBMS_OUTPUT.PUTLINE(per_kayit.per_no);
DBMS_OUTPUT.PUTLINE(per_kayit.p_adi);
DBMS_OUTPUT.PUTLINE(per_kayit.p_ucret);
END;
Şimdiki örnek ise bir tablodan bilgiyi alma,
--kayıt türü tanımlanıyor
TYPE per_kayit_turu IS RECORD (
p_no personel.personel_no%TYPE,
p_adi personel.adi%TYPE,
p_ucret personel.ucret_no%TYPE);
--kayıt tanımlanıyor..
per_kayit per_kayit_turu;
BEGIN
-- tablodan okunan bilgilere atama yapılıyor...
SELECT personel_no, adi, ucret
INTO per_kayit.per_no, per_kayit.p_adi, per_kayit.p_ucret
FROM personel WHERE personel_no = 101;
--alanlardaki bilgiler görüntüleniyor
DBMS_OUTPUT.PUTLINE(per_kayit.per_no);
DBMS_OUTPUT.PUTLINE(per_kayit.p_adi);
DBMS_OUTPUT.PUTLINE(per_kayit.p_ucret);
END;
Çıktı alamayan arkadaşlar blok yapısının üstüne ” SET SERVEROUTPUT ON; ” yazıp run etmeli…
gökalp kuşçu
Tags: Oracle, oracle kayıt türü, oracle record, oracle record tanımlama, oracle type
No comments
Comments feed for this article