10 Ağustos 2007 Cuma

Birleşmeli Dizilerin (Associative Arrays) Tanımlanması

Birleşmeli Diziler (Associative Arrays) veya diğer adıyla İndisli Tablolar (Index-by-tables) için şu yazım kuralı (syntax) kullanılır:

TYPE tip_adı IS TABLE OF öğe_tipi [NOT NULL]
INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARCHAR2 (büyüklük_sınırı)];
INDEX BY anahtar_tipi;

anahtar_tipi, BINARY_INTEGER veya PLS_INTEGER tipinde bir sayısal değer olabilir, VARCHAR2 veya alttipleri olan VARCHAR, STRING veya LONG olabilir. LONG haricinde VARCHAR2-tabanlı bir anahtar'ın uzunluğu belirtilmelidir. LONG ise VARCHAR2(32760) tipinde bir anahtar bildirimi anlamına gelir.

Birleşmeli dizilerde şu tipler anahtar olarak kullanılamaz: RAW, LONG RAW, RAWID, CHAR, CHARACTER. Bir başlatma maddesine (initialization clause) gerek yoktur ve buna izin de verilmez.

VARCHAR2-tabanlı bir anahtar kullanan bir birleşmeli dizinin bir öğesine atıfta bulunulduğunda (reference), DATE ve TIMESTAMP gibi diğer tipler de kullanılabilir ancak bu tiplerin TO_CHAR fonksiyonu ile VARCHAR2'ye çevrilebilmesi gerekir.

İndisli tablolar (birleşmeli diziler), ardışık olmayan birincil anahtar değerlerini (primary key values) indis olarak kullanarak veri depolayabilir. Aşağıdaki örnekte indisli tabloda tek bir kayıt tutulmaktadır ve bu kaydın indisi 1 yerine 7468 'dir.

DECLARE
TYPE EmpTabTyp IS TABLE OF emp%ROWTYPE
INDEX BY BINARY_INTEGER;
emp_tab EmpTabTyp;
BEGIN
/* employee (çalışan) kaydına erişim */
SELECT * INTO emp_tab(7468) FROM emp WHERE empno = 7468;
END;

Hiç yorum yok: