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