Oracle PL/SQL RECORD Kullanımı
PL/SQL bloklarında sıkça kullanılan veri yapılarından biri de RECORD (Kayıt) yapısıdır.
Bir RECORD, birbirleriyle ilişkili birden fazla alanı tek bir yapı altında toplamanıza olanak sağlar. C dilindeki struct veya diğer programlama dillerindeki nesne (object) mantığına benzer şekilde düşünülebilir. Her alan farklı bir veri tipine sahip olabilir ve tek bir değişken üzerinden yönetilebilir.
Özellikle bir satırdaki verileri toplu olarak taşımak veya sorgu sonuçlarını düzenli bir şekilde saklamak istediğiniz durumlarda oldukça kullanışlıdır.
RECORD Türü Nasıl Tanımlanır?
Bir RECORD oluşturabilmek için öncelikle TYPE ... IS RECORD yapısıyla yeni bir kayıt türü tanımlanır.
Genel söz dizimi aşağıdaki gibidir.
TYPE record_type IS RECORD (
field_name data_type,
...
);
Tanımlama işlemi her zaman DECLARE bloğunda yapılır.
Basit Bir RECORD Tanımı
Aşağıdaki örnekte üç alandan oluşan bir kayıt türü oluşturulmaktadır.
DECLARE
TYPE employee_record IS RECORD
(
employee_no NUMBER(3),
employee_name VARCHAR2(30),
salary NUMBER
);
BEGIN
NULL;
END;
/
Bu örnekte oluşturduğumuz employee_record henüz yalnızca bir veri tipi tanımıdır. Kullanabilmek için bu tipten bir değişken oluşturmamız gerekir.
%TYPE Kullanımı
Oracle’da en sevdiğim özelliklerden biri %TYPE anahtar kelimesidir.
Bir tablo kolonunun veri tipini tekrar yazmak yerine doğrudan o kolondan alabilirsiniz. Böylece ileride kolon tipi değişirse PL/SQL kodunuzu güncellemeniz gerekmez.
DECLARE
TYPE employee_record IS RECORD
(
employee_no personel.personel_no%TYPE,
employee_name personel.adi%TYPE,
salary personel.ucret%TYPE
);
BEGIN
NULL;
END;
/
Bu yöntem sayesinde RECORD alanları ile veritabanı kolonları arasında güçlü bir ilişki kurulmuş olur.
RECORD Değişkeni Oluşturmak
RECORD türünü tanımladıktan sonra artık bu tipten bir değişken oluşturabiliriz.
DECLARE
TYPE employee_record IS RECORD
(
employee_no NUMBER(3),
employee_name VARCHAR2(30),
salary NUMBER
);
employee employee_record;
BEGIN
NULL;
END;
/
Artık employee isimli değişkenimiz oluşturulmuştur.
RECORD Alanlarına Değer Atamak
RECORD içerisindeki alanlara nokta (.) operatörü ile erişilir.
DECLARE
TYPE employee_record IS RECORD
(
employee_no NUMBER(3),
employee_name VARCHAR2(30),
salary NUMBER
);
employee employee_record;
BEGIN
employee.employee_no := 305;
employee.employee_name := 'GOKALP';
employee.salary := 6650;
DBMS_OUTPUT.PUT_LINE(employee.employee_no);
DBMS_OUTPUT.PUT_LINE(employee.employee_name);
DBMS_OUTPUT.PUT_LINE(employee.salary);
END;
/
Çıktı:
305
GOKALP
6650
SELECT INTO ile RECORD Doldurmak
RECORD yapılarının en güzel kullanım alanlarından biri de sorgu sonuçlarını doğrudan alanlara aktarabilmektir.
DECLARE
TYPE employee_record IS RECORD
(
employee_no personel.personel_no%TYPE,
employee_name personel.adi%TYPE,
salary personel.ucret%TYPE
);
employee employee_record;
BEGIN
SELECT
personel_no,
adi,
ucret
INTO
employee.employee_no,
employee.employee_name,
employee.salary
FROM personel
WHERE personel_no = 101;
DBMS_OUTPUT.PUT_LINE(employee.employee_no);
DBMS_OUTPUT.PUT_LINE(employee.employee_name);
DBMS_OUTPUT.PUT_LINE(employee.salary);
END;
/
Bu örnekte sorgudan dönen tek satırlık veri doğrudan RECORD alanlarına aktarılmaktadır.
RECORD Kullanmanın Avantajları
RECORD yapısı;
- Birbiriyle ilişkili verileri tek değişkende toplar.
- Kodun okunabilirliğini artırır.
- Parametre geçişlerini kolaylaştırır.
SELECT INTOişlemlerinde oldukça kullanışlıdır.%TYPEile birlikte kullanıldığında bakım maliyetini önemli ölçüde azaltır.
Özellikle büyük PL/SQL projelerinde RECORD yapıları kodun daha düzenli ve anlaşılır olmasını sağlar.
Sonuç
PL/SQL’deki RECORD veri yapısı, ilişkili alanları tek bir yapı altında toplamak için kullanılan güçlü bir özelliktir. Basit örneklerde çok gerekli görünmese de, büyük projelerde sorgu sonuçlarını taşımak, prosedürler arasında veri aktarmak ve kod tekrarını azaltmak açısından oldukça faydalıdır.
Benim Oracle’da en sevdiğim özelliklerden biri ise RECORD yapısını %TYPE ile birlikte kullanabilmek. Böylece veritabanındaki kolon tipleri ile PL/SQL değişkenleri her zaman uyumlu kalıyor ve ileride yapılacak şema değişikliklerinde kodun bakım maliyeti ciddi şekilde azalıyor.
📝 Arşiv Notu
Bu yazı ilk olarak 2010 yılında hazırlanmıştır. RECORD veri yapısı ve
%TYPEanahtar kelimesinin kullanım mantığı günümüzde de Oracle PL/SQL içerisinde aynen geçerliliğini korumaktadır. Kodları çalıştırırkenDBMS_OUTPUT.PUT_LINEçıktılarının görüntülenebilmesi için SQL*Plus, SQL Developer veya benzeri araçlarda aşağıdaki komutu çalıştırmayı unutmayın.
Çok temiz bir anlatım yapmışsınız.
Elinize sağlık.
Saygılar.