Birbiri ile ilgili, farklı tiplerde olan verilerin tutulduğu yapılardır. Diğer Programlama dillerindeki Class(Java, C# vb.), Structure  (C ) gibi düşünülebilir. PL/SQL ‘de bu yapı ile birlikte farklı tiplerdeki verileri tutabiliyoruz ve çok büyük kolaylıklar sağlıyor bizlere. Farklı tipler derken farklı veri tiplerini kast ediyorum. Mesela bir kişiye ait iletişim bilgilerini tutacaksınız ve bu iletişim bilgilerinin içinde telefon numarası (number),e_mail (varchar),adres(varchar) var ve bunları bir arada tutmak istiyorsunuz. İşte bu gibi durumlarda Record yapısı işimize çok yarayacak.

  • Pl/Sql’de veritabanı ile iletişimde olan tipler tanımlamaktan bahsedersek %TYPE ve %ROWTYPE niteleyicilerini kullanabilirsiniz.
  • Record içindeki veri tipleri varchar2, date, number olabilir.
  • %Type ile istenilirse tablodaki bir kolonun veri tipi ile de eşleştirilebilir. Bu sayade ilgili tabloda ilgili kolonun veri tipi değiştiğinde bizim RECORD’umuz yeni veri tipini otomatik olarak algılayacaktır.
  • %RowTypeile belirtilen tablodaki tüm kolona adları ve veri tipleri ile Record oluşturulabilir. Tabloda herhangi bir değişiklik olması durumunda %RowType ile tanımlanan Record bu değişikliği otomatik olarak algılayacaktır.
  • Record içindeki veri tiplerinde “Not Null”  ve  “Default” Constraintlerini kullanabilirsiniz.
  • Record tanımlanırken daha önceden tanımlanmış bir Record Alan Adı olarak kullanılabilir (Nested Record).
  • Recordlar veritabanında tutulmazlar.
  • Tanımlanan  Record bir Fonksiyon(Function) için dönen değer olarak kullanabilir
  • Recordlar Prosedür(Procedure) ve Fonksiyonlar için “In” ve/veya  “Out” parametresi olarak kullanılabilir
  • Recordlardaki Alan Adları Tekil Olmak Zorunda.

 

Record üç farklı yapıda oluşturulabilir:

  • Tablo Tabanlı (Table Based)
  • Cursor Tabanlı (Cursor Based)
  • Kullanıcı tanımlı (User Defined)

Tablo Tabanlı (Table Based)

İsminden de anlaşılacağı üzere record yapımız bir tablonun yapısını tutacaktır. Yani tablomuzun tüm alanlarını tip ayırt etmeksizin kayıt altında tutacak bir yapı sağlayacak bizlere. Tabi bu yapıyı sağlayacak bir anahtar kelimemiz olması gerekiyor ve bu anahtar kelime ise %ROWTYPE. Row (satır) tablonun bir satırını ve TYPE ise bu satırın veri tipleri ifade eder ve bize ilgili tablonun veri yapısını tutan bir record döndürür.Gelin  örnek ile daha net anlayalım.

DECLARE
   employee_rec   hr.employees%ROWTYPE;
BEGIN
   SELECT *
     INTO employee_rec
     FROM hr.employees
    WHERE employee_id = 100;

   DBMS_OUTPUT.put_line ('Employee id: ' || employee_rec.employee_id);
   DBMS_OUTPUT.put_line ('Employee Name: ' || employee_rec.FIRST_NAME);
   DBMS_OUTPUT.put_line ('Employee Email: ' || employee_rec.email);
END;
/

Cursor Tabanlı (Cursor Based)

Bu record yapısı oluşturduğumuz cursor verisinin tuttuğu veri tiplerini içerir. Aşağıdaki örnek ile biraz daha  net anlaşılacaktır.

DECLARE
      CURSOR employees_cur is
             select employee_id,first_name,last_name
             from hr.employees;
      employees_cur_rec employees_cur%rowtye;
BEGIN
     open employees_cur;
     loop
         fetch employees_cur into employees_cur_rec;
         exit when employees_cur%notfound;
         dbms_output.putline(employees_cur_rec.employee_id || ' '
                  ||employees_cur_rec.first_name ||' '|| employees_cur_rec.last_name);
     end loop;
END;
/

Kullanıcı tanımlı (User Defined)

Kendi isteğimize göre de record oluşturabiliriz. Çok basit bir örnek yapacak olursak.

DECLARE
   --cursor tanimini yapariz
   type books is record
      (title varchar(50),
       author varchar(50),
       subject varchar(100),
       book_id number);
   --olusturdugumuz cursor tipinde degisken tanimlariz
   book1 books;
   book2 books;
BEGIN
   -- Book 1 specification
   book1.title  := 'C Programming';
   book1.author := 'Nuha Ali ';
   book1.subject := 'C Programming Tutorial';
   book1.book_id := 6495407;

   -- Book 2 specification
   book2.title := 'Telecom Billing';
   book2.author := 'Zara Ali';
   book2.subject := 'Telecom Billing Tutorial';
   book2.book_id := 6495700;

   -- Print book 1 record
   dbms_output.put_line('Book 1 title : '|| book1.title);
   dbms_output.put_line('Book 1 author : '|| book1.author);
   dbms_output.put_line('Book 1 subject : '|| book1.subject);
   dbms_output.put_line('Book 1 book_id : ' || book1.book_id);

   -- Print book 2 record
   dbms_output.put_line('Book 2 title : '|| book2.title);
   dbms_output.put_line('Book 2 author : '|| book2.author);
   dbms_output.put_line('Book 2 subject : '|| book2.subject);
   dbms_output.put_line('Book 2 book_id : '|| book2.book_id);
END;
/

Yararlı olması Dilegiyle …
Yazar : Mustafa Bektaş Tepe

Kaynaklar;
http://www.tutorialspoint.com/plsql/plsql_basic_syntax.htm
https://developersdaily.wordpress.com
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/
https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/toc.htm
https://oracle-base.com/articles/misc/introduction-to-plsql

Loading