Denizi bir testiye dökersen ne alır?
:Bir günün kısmetini –Mevlana
Merhaba
Önceki makalemizde object type’ları incelemiştik.(Buradan inceleyebilirsiniz) Bu makalemizde de object type’ların list özelliğini inceleyeceğiz
Herzaman ki gibi önce create. Hadi type ve type listimizi create scriptini yazalım.
---create type create or replace type t_key_value as object ( key varchar2(1000), value varchar2(4000) ) /
-- create type (List<>) create or replace type t_key_value_list as table of t_key_value; /
type’ı referans alan bir liste oluşturmuş olduk aslında.
Şimdi bunları nasıl kullanacağız onu inceleyelim.
Kısa bir özet geçeyim.
Öncelikle bir for dongusu kuruyoruz. bu dondu 1 den 7ye kadar(7 de dahil) çalışacak.
bu for dongusunda gelen deger 1 ise pazartesi, 2 ise salı, 3 ise çarşamba… olacak şekilde
v_day diye bir değişkenimize değer atıyor. burada farklı olarak case kullanıyoruz(Buradan case kullanımını inceleyebilirsiniz)
buraya kadar fasa fiso….
Burdan sonra artık v_kv type’ımıza değer ataması yapıyoruz(Bu konuyuda buradan inceleyebilirsiniz)
type’ı doldurduktan sonra, v_kv_list’i extend edip, oluşturduğumuz type’ı index vererek atıyoruz.
daha sonra verdiğimiz bu index’ten geri okuyacağız
Burada iki for döngüsü var, biri yazar biri okur.
Her kodun yanına comment eklemeye çalışıyorum ki, sıfırdan başlayan insanlarda anlayabilsin diye
Faydalı olabilmek ümidiyle
-- Created on 14.05.2015 by Cevheri
declare
v_kv t_Key_Value := t_Key_Value(null, null); -- oncelikle type degiskenimizi tanımlıyor ve initialize ediyoruz
v_kv_list t_key_value_list := t_key_value_list(); -- key value type'ının listesini olusturmustuk onu tanımlıyoruz
v_day varchar2(10) := null; -- gunlerin isimlerini tutabilmek icin ayrı bir degisken tanımladık case fonksiyonu ile buna deger atayacağız
begin
-- WRITE TYPE
-------------------------------------------------
-- Yedi kez donecek bir for döngüsü oluşturuyoruz
dbms_output.put_line('------ Deger Atama ------');
for r in 1 .. 7 loop
------------------------
-- gelen degere gore gunun ismi ilgili degiskene atilacak
case r -- r for dongusundeki donus degerini alır o yüzden ayrıca bir degisken tanımlamaya gerek yok
when 1 then
v_day := 'PAZARTESI';
when 2 then
v_day := 'SALI';
when 3 then
v_day := 'CARSAMBA';
when 4 then
v_day := 'PERSEMBE';
when 5 then
v_day := 'CUMA';
when 6 then
v_day := 'CUMARTESI';
when 7 then
v_day := 'PAZAR';
else
v_day := null; -- olmaz ama her zaman siz kodunuzu yazarken ELSE'yi düşünün ve yazın...
end case;
------------------------
-- oncelikle type degiskenimi dolduruyoruz....
v_kv.key := r;
v_kv.value := v_day;
------------------------
-- object type listimizi extend edip, içine type basacağız.
v_kv_list.extend;
v_kv_list(v_kv_list.count) := v_kv; -- index vererek type'ı refere ediyoruz.
------------------------
dbms_output.put_line('Atanan Key :' || v_kv.key);
dbms_output.put_line('Atanan Value :' || v_kv.value);
end loop;
dbms_output.put_line('-----------------------------');
-- END WRITE-------------------------------------
--**************************************************************
-- READ TYPE-------------------------------------
v_kv := null;
dbms_output.put_line('------- Deger Okuma ------');
-- hadi artık, doldurulan listelerin içindeki değerleri okuyalım
for r in v_kv_list.first .. v_kv_list.last loop
v_kv := v_kv_list(r); --- yine index vererek okuyoruz....
dbms_output.put_line('Okunan Key :' || v_kv.key);
dbms_output.put_line('Okunan Value :' || v_kv.value);
end loop;
dbms_output.put_line('----------------------------');
-- END READ-------------------------------------
end;
Selam ve Dua ile…