Kullanılacak öğelerin (elements) sayısı önceden biliniyorsa ve bu öğelere genelde sırayla ulaşılacak ise varray kullanmak yerinde olacaktır. Veritabanında tutulurken varrayler sıralarını ve indislerini korurlar.
Her bir varray tek bir nesne olarak tutulur; 4 KB'tan daha küçükse tablo içinde, 4 KB'tan daha büyükse tablo dışında ama yine aynı tabloalanında (tablespace) depolanır. Varrayin bütün öğelerine aynı anda erişilmelidir veya bunlar aynı anda güncellenmelidir örneğin bütün öğeler üzerinde tek seferinde bir işlem yapılması gibi. Bu durum çok sayıda öğenin depolanmasında ve bunlara erişimde kullanışlı değildir.
İçiçe tablolar (nested tables) seyrek (sparse) olabilir; en sondaki öğeyi kaldırmak yerine herhangi bir öğe silinebilir. İçiçe tablo bir depolama tablosunda sırasız (out-of-line) olarak depolanır, bu depolama tablosu içiçe tablonun kendisiyle ilişkilendirilmiştir ve sistem tarafından oluşturulmuştur.
Bu durum topluluğun (collection) sadece bazı öğelerini etkileyen sorgu ve güncellemelerde içiçe tabloları kullanışlı kılar. Bir içiçe tablo veritabanında depolanırken sırası (order) ve indisler (subscripts) korunmaz, depolama ve erişimler sonrasında bu sıra ve indisler değişebilir.
8 Ağustos 2007 Çarşamba
3 Ağustos 2007 Cuma
İçiçe Tablolarla Birleşmeli Dizilerin Farkları
İçiçe tablolar (nested tables) da birleşmeli diziler (associative arrays) de benzer indis yazımı (subscript notation) kullanır, ancak parametre geçirme kolaylığı ve sürdürülebilirlilk açısından farklı özellikleri vardır.
İçiçe tablolar (nested tables), bir veritabanı sütununda tutulabilir ama birleşmeli diziler (associative arrays) tutulamaz. İçiçe tablolar, kalıcı olarak tutulması gereken önemli veri ilişkileri (data relationships) için uygundur.
Birleşmeli diziler, bir yordam (procedure) çağrıldığında veya bir paket (package) başlatıldığında (initialized), topluluğun (collection) bellekte oluşturulabildiği zamanlarda göreceli olarak küçük arama (lookup) tabloları için uygundur. Büyüklüğü önceden bilinmeyen bilgilerin toplanmasında uygundur çünkü birleşmeli dizilerin büyüklükleri önceden sınırlandırılmamıştır, indis değerleri de esnektir; negatif olabilir, sıralı olmayabilir ve uygun olduğunda indis için sayı yerine string değerleri kullanılabilir.
PL/SQL, sayısal anahtar değerleri (numeric key values) kullanan host dizileri ve birleşmeli dizileri kendiliğinden birbirlerine çevirir. Bir veritabanı sunucusundan veya bir veritabanı sunucusuna toplulukları (collections) geçirmenin en etkili yolu, isimsiz (anonymous) PL/SQL blokları kullanmaktır; bu bloklar girdi ve çıktı (input and output) host dizilerini birleşmeli dizilere topluca bağlamakta (bulk-bind) kullanılır.
İçiçe tablolar (nested tables), bir veritabanı sütununda tutulabilir ama birleşmeli diziler (associative arrays) tutulamaz. İçiçe tablolar, kalıcı olarak tutulması gereken önemli veri ilişkileri (data relationships) için uygundur.
Birleşmeli diziler, bir yordam (procedure) çağrıldığında veya bir paket (package) başlatıldığında (initialized), topluluğun (collection) bellekte oluşturulabildiği zamanlarda göreceli olarak küçük arama (lookup) tabloları için uygundur. Büyüklüğü önceden bilinmeyen bilgilerin toplanmasında uygundur çünkü birleşmeli dizilerin büyüklükleri önceden sınırlandırılmamıştır, indis değerleri de esnektir; negatif olabilir, sıralı olmayabilir ve uygun olduğunda indis için sayı yerine string değerleri kullanılabilir.
PL/SQL, sayısal anahtar değerleri (numeric key values) kullanan host dizileri ve birleşmeli dizileri kendiliğinden birbirlerine çevirir. Bir veritabanı sunucusundan veya bir veritabanı sunucusuna toplulukları (collections) geçirmenin en etkili yolu, isimsiz (anonymous) PL/SQL blokları kullanmaktır; bu bloklar girdi ve çıktı (input and output) host dizilerini birleşmeli dizilere topluca bağlamakta (bulk-bind) kullanılır.
Birleşmeli Dizilerde Küreselleşme Ayarları
VARCHAR2 anahtar değerli (key values) birleşmeli diziler (associative arrays) kullanan bir oturumda (session), ulusal dil (national language) ayarları veya küreselleşme ayarları (globalization settings) değişirse, program bir çalışma hatası (runtime error) ile karşılaşabilir.
Örneğin bir oturumda, NLS_COMP veya NLS_SORT gibi başlatma parametrelerinin (initialization parameters) değiştirilmesi NEXT ve PRIOR gibi yöntemlerin (methods) istisna (exception) vermesine neden olabilir, bu yüzden yeni işlem yapılmadan önce bu ayarlar orjinal değerlerine çevrilmelidir.
Anahtar (key) olarak bir stringi kullanan bir birleşmeli dizinin (associative array) bildirimi yapılırken, bildirimde VARCHAR2, STRING veya LONG tipi kullanılmalıdır. TO_CHAR fonksiyonu ile VARCHAR2 'ye çevrilebildiği sürece farklı bir tip de kullanılabilir, örneğin NCHAR, NVARCHAR2 veya DATE gibi.
Bununla beraber anahtar olarak kullanılan değerler tutarlı ve eşsiz olduğunda diğer tiplerin kullanımında dikkatli olunmalıdır. Örneğin NLS_DATE_FORMAT başlatma parametresi (initialization parameter) değişirse, SYSDATE 'in string değeri değişebilir; bu durumda da array_element(SYSDATE) eskiden verdiği sonucu vermez. Benzer şekilde iki farklı NVARCHAR2 değeri aynı VARCHAR2 değerine dönüşebilir (bazı ulusal karakterlerin yerine soru işareti gelerek).
Bir veritabanı bağlantısı (database link) kullanılarak, bir birleşmeli dizi (associative array) parametre olarak uzaktaki bir veritabanına gönderilirse, bu iki veritabanının farklı küreselleşme ayarları (gobalization settings) olabilir.
Uzaktaki veritabanı FIRST ve NEXT gibi işlemler yaptığında kendi karakter düzenini (character order) kullanır, bu topluluğun (collection) ilk olarak oluşturulduğu düzenden farklı olabilir. Bu karakter seti farklılıkları, uzaktaki veritabanında, eşsiz (unique) olan iki anahtarın bu eşsizlik özelliğini ortadan kaldırırsa, program VALUE_ERROR istisnası (exception) verebilir.
Örneğin bir oturumda, NLS_COMP veya NLS_SORT gibi başlatma parametrelerinin (initialization parameters) değiştirilmesi NEXT ve PRIOR gibi yöntemlerin (methods) istisna (exception) vermesine neden olabilir, bu yüzden yeni işlem yapılmadan önce bu ayarlar orjinal değerlerine çevrilmelidir.
Anahtar (key) olarak bir stringi kullanan bir birleşmeli dizinin (associative array) bildirimi yapılırken, bildirimde VARCHAR2, STRING veya LONG tipi kullanılmalıdır. TO_CHAR fonksiyonu ile VARCHAR2 'ye çevrilebildiği sürece farklı bir tip de kullanılabilir, örneğin NCHAR, NVARCHAR2 veya DATE gibi.
Bununla beraber anahtar olarak kullanılan değerler tutarlı ve eşsiz olduğunda diğer tiplerin kullanımında dikkatli olunmalıdır. Örneğin NLS_DATE_FORMAT başlatma parametresi (initialization parameter) değişirse, SYSDATE 'in string değeri değişebilir; bu durumda da array_element(SYSDATE) eskiden verdiği sonucu vermez. Benzer şekilde iki farklı NVARCHAR2 değeri aynı VARCHAR2 değerine dönüşebilir (bazı ulusal karakterlerin yerine soru işareti gelerek).
Bir veritabanı bağlantısı (database link) kullanılarak, bir birleşmeli dizi (associative array) parametre olarak uzaktaki bir veritabanına gönderilirse, bu iki veritabanının farklı küreselleşme ayarları (gobalization settings) olabilir.
Uzaktaki veritabanı FIRST ve NEXT gibi işlemler yaptığında kendi karakter düzenini (character order) kullanır, bu topluluğun (collection) ilk olarak oluşturulduğu düzenden farklı olabilir. Bu karakter seti farklılıkları, uzaktaki veritabanında, eşsiz (unique) olan iki anahtarın bu eşsizlik özelliğini ortadan kaldırırsa, program VALUE_ERROR istisnası (exception) verebilir.
31 Temmuz 2007 Salı
İndisli Tablolar (Index-by Tables)
İndisli Tablolar (Index-by Tables) veya diğer adıyla birleşmeli diziler (associative arrays), anahtar-değer çifti (key-value pairs) kümeleridir; her bir anahtar eşsizdir ve dizide karşılık gelen bir değeri gösterir. Anahtar, tamsayı veya string olabilir.
Anahtar kullanarak bir değer atandığında ilk seferinde bu değer diziye eklenir, aynı anahtarı kullanan takip eden atamalarda ise aynı giriş güncellenir (update). Eşsiz bir anahtar seçmek önemlidir; bu SQL tablosundan birincil anahtarı seçerek de yapılabilir veya birtakım stringler birleştirilerek de olabilir.
Birleşmeli dizilerde gelişigüzel büyüklükteki veri kümeleri tutulabilir. Yeri bilinmeyen tek bir öğenin hızlı aranmasında, bütün diziyi baştan sona taramadan bulunması sağlanır, bir SQL tablosunun basit haline benzer, bu bakımdan birleşmeli diziler, bizi hızlı arama sonuçlarının (lookup data) basit geçici depolanmasında, disk alanı kullanmaktan ve ağ işlemlerinden kurtarır.
Birleşmeli diziler geçici verilerin (temporary data) tutulmasına yönelik oldukları için INSERT ve SELECT INTO gibi SQL ifadeleri ile kullanılamazlar. Eğer tip bildirimleri ve değer atamaları (value assignments) bir paketin (package) içinde yapılırsa, birleşmeli diziler, veritabanı oturumunun (database session) ömrü boyunca kalıcı (persistent) hale getirilebilirler.
Anahtar kullanarak bir değer atandığında ilk seferinde bu değer diziye eklenir, aynı anahtarı kullanan takip eden atamalarda ise aynı giriş güncellenir (update). Eşsiz bir anahtar seçmek önemlidir; bu SQL tablosundan birincil anahtarı seçerek de yapılabilir veya birtakım stringler birleştirilerek de olabilir.
Birleşmeli dizilerde gelişigüzel büyüklükteki veri kümeleri tutulabilir. Yeri bilinmeyen tek bir öğenin hızlı aranmasında, bütün diziyi baştan sona taramadan bulunması sağlanır, bir SQL tablosunun basit haline benzer, bu bakımdan birleşmeli diziler, bizi hızlı arama sonuçlarının (lookup data) basit geçici depolanmasında, disk alanı kullanmaktan ve ağ işlemlerinden kurtarır.
Birleşmeli diziler geçici verilerin (temporary data) tutulmasına yönelik oldukları için INSERT ve SELECT INTO gibi SQL ifadeleri ile kullanılamazlar. Eğer tip bildirimleri ve değer atamaları (value assignments) bir paketin (package) içinde yapılırsa, birleşmeli diziler, veritabanı oturumunun (database session) ömrü boyunca kalıcı (persistent) hale getirilebilirler.
28 Temmuz 2007 Cumartesi
Varrayler (Değişken Boyutlu Diziler)
VARRAY tipindeki öğelere varray denir. Tek bir belirleyicinin (identifier) bütün bir toplulukla (collection) ilişkilendirilmesine olanak verir. Bir öğeye ulaşmak için standard indisleme yazım kuralı (syntax) kullanılır. Örneğin Grades(3) , Grades adlı varrayin üçüncü öğesini gösterir.
Bir varrayin tip tanımlamasında belirtilmesi zorunlu olan bir maksimum büyüklüğü vardır. İndisinin sabit olan alt sınırı 1'dir, üst sınırı ise genişletilebilir. Bir varrayin hiç öğesi olamayabileceği gibi, tip tanımlamasında belirtilmiş olan maksimum sayıda öğesi de olabilir.
Bir varrayin tip tanımlamasında belirtilmesi zorunlu olan bir maksimum büyüklüğü vardır. İndisinin sabit olan alt sınırı 1'dir, üst sınırı ise genişletilebilir. Bir varrayin hiç öğesi olamayabileceği gibi, tip tanımlamasında belirtilmiş olan maksimum sayıda öğesi de olabilir.
İçiçe Tablolar (Nested Tables)
İçiçe tablolar, veritabanı içinde, tek kolonlu veritabanı tabloları olarak düşünülebilir. Oracle içiçe tablonun satırlarını düzensiz olarak depolar ancak bu tablo bir PL/SQL değişkenine atandığında satırlara 1'den başlayarak ardışık indis değerleri verilir; bu ayrı ayrı satırlara dizi benzeri erişim sağlar. Her bir öğesi bir içiçe tablo olan içiçe tablolar oluşturularak çok boyutlu diziler modellenebilir.
İçiçe tabloları dizilerden ayıran iki önemli özellik vardır:
1) Dizilerin belirlenmiş bir üst sınırı vardır ancak içiçe tablolar sınırlandırılmamıştır ve boyutları dinamik olarak artabilir.
2) Diziler sıkışık olmak zorundadır, yani indisleri ardışık olmalıdır; bu yüzden tek (yalnız) öğeler silinemez. İçiçe tablolar da başta sıkışıktır, ama seyrek hale gelebilirler, yani indisleri ardışık olmayabilir. Bir içiçe tablodan yerleşik yordam (built-in procedure) olan DELETE kullanılarak öğeler silinebilir, bu indiste boşluklar oluşturubilir ama yerleşik (built-in) fonksiyon NEXT, peşpeşe gelen indislerin tekrarlanmasına olanak sağlar.
İçiçe tabloları dizilerden ayıran iki önemli özellik vardır:
1) Dizilerin belirlenmiş bir üst sınırı vardır ancak içiçe tablolar sınırlandırılmamıştır ve boyutları dinamik olarak artabilir.
2) Diziler sıkışık olmak zorundadır, yani indisleri ardışık olmalıdır; bu yüzden tek (yalnız) öğeler silinemez. İçiçe tablolar da başta sıkışıktır, ama seyrek hale gelebilirler, yani indisleri ardışık olmayabilir. Bir içiçe tablodan yerleşik yordam (built-in procedure) olan DELETE kullanılarak öğeler silinebilir, bu indiste boşluklar oluşturubilir ama yerleşik (built-in) fonksiyon NEXT, peşpeşe gelen indislerin tekrarlanmasına olanak sağlar.
Topluluk (Collection)
Bir topluluk (collection), hepsi aynı tipten olan düzenli bir grup öğeden oluşur. Her bir öğenin topluluktaki yerini belirleyen yegane (unique) bir indisi (subscript) vardır. PL/SQL şu topluluk tiplerini sunar:
İndisli tablolar (index-by tables) veya birleşmeli dizilerde (associative arrays) gelişigüzel sayılar veya stringler kullanılarak öğelere ulaşılabilir. (Diğer programlama dillerindeki hash tablolarına benzer).
İçiçe tablolar (nested tables) gelişigüzel sayıda öğeyi tutar. İndis olarak sıralı sayıları kullanırlar. İçiçe tablolar veritabanı tablolarında tutularak ve SQL ile idare edilerek eşdeğer SQL tipleri tanımlanabilir.
Varrayler (Değişken boyutlu diziler, Variable-size arrays), sabit sayıda öğe tutarlar ancak bu sayı çalışma zamanında değiştirilebilir. İndis olarak sıralı sayıları kullanırlar. Varraylerin veritabanı tablolarında tutulması sağlanarak eşdeğer SQL tipleri tanımlanabilir. SQL kullanılarak depolanmaları ve erişimleri yapılabilir ancak bu içiçe tablolardaki kadar esnek olmayacaktır.
Öğeleri topluluk olan topluluklar yaratılarak çok boyutlu diziler modellenebilir. Bir uygulamada toplulukları kullanmak için önce PL/SQL tipleri sonra da bu tipte değişkenler tanımlanır. Topluluk tipleri bir yordam (procedure), fonksiyon veya paket (package) içinde tanımlanabilir. Topluluk değişkenleri parametre olarak geçirilebilir.
Tek değerden daha karışık olan verileri aramak için PL/SQL kayıtları (records) veya SQL nesne tipleri topluluklarda tutulabilir. İçiçe tablolar ve varrayler aynı zamanda nesne tiplerinin (object types) nitelikleri (attributes) olabilirler.
İndisli tablolar (index-by tables) veya birleşmeli dizilerde (associative arrays) gelişigüzel sayılar veya stringler kullanılarak öğelere ulaşılabilir. (Diğer programlama dillerindeki hash tablolarına benzer).
İçiçe tablolar (nested tables) gelişigüzel sayıda öğeyi tutar. İndis olarak sıralı sayıları kullanırlar. İçiçe tablolar veritabanı tablolarında tutularak ve SQL ile idare edilerek eşdeğer SQL tipleri tanımlanabilir.
Varrayler (Değişken boyutlu diziler, Variable-size arrays), sabit sayıda öğe tutarlar ancak bu sayı çalışma zamanında değiştirilebilir. İndis olarak sıralı sayıları kullanırlar. Varraylerin veritabanı tablolarında tutulması sağlanarak eşdeğer SQL tipleri tanımlanabilir. SQL kullanılarak depolanmaları ve erişimleri yapılabilir ancak bu içiçe tablolardaki kadar esnek olmayacaktır.
Öğeleri topluluk olan topluluklar yaratılarak çok boyutlu diziler modellenebilir. Bir uygulamada toplulukları kullanmak için önce PL/SQL tipleri sonra da bu tipte değişkenler tanımlanır. Topluluk tipleri bir yordam (procedure), fonksiyon veya paket (package) içinde tanımlanabilir. Topluluk değişkenleri parametre olarak geçirilebilir.
Tek değerden daha karışık olan verileri aramak için PL/SQL kayıtları (records) veya SQL nesne tipleri topluluklarda tutulabilir. İçiçe tablolar ve varrayler aynı zamanda nesne tiplerinin (object types) nitelikleri (attributes) olabilirler.
Kaydol:
Kayıtlar (Atom)