Başlangıç > Database, Forms, Oracle, PL/SQL, Reports > pl/sql de nested table kullanımı 2

pl/sql de nested table kullanımı 2


Merhaba
Daha önce size pl/sql de nested table kullanımı 1 ile nested table özelliğimizi tek sütün değeri olarak kullanımı anlatmıştım.Şimdi ise nested table ile tek bir sütun değil istediğimiz kadar faklı sütun değerini kullanımı anlatacağım.
Öncelikle bu işlem için kullanacağımız type değerimizi oluşturalım.

CREATE OR REPLACE TYPE kullanici_hesap AS OBJECT
(
  hesap_id    number,
  hesap VARCHAR2(50),
  sifre varchar2(50)
);
CREATE OR REPLACE TYPE kullanici_hesap_type AS TABLE OF kullanici_hesap;

Type hazır olduğuna göre bu type ile nested table oluşturalım.

CREATE TABLE kullanici
(
  id       NUMBER,
  adi      VARCHAR2(20),
  hesaplar kullanici_hesap_type
)
NESTED TABLE hesaplar STORE AS  type_kullanici_hesap;

Artık nested table hazır. Şimdi bu tablo içerisine kayıtlarımı ekleyelim ve sonuçlarına bakalım.

INSERT INTO kullanici
VALUES
  (1, 'ADMIN',
   kullanici_hesap_type(kullanici_hesap('1', 'WORDPRESS', '1234'), kullanici_hesap('2', 'FACEBOOK', '5678'),
   kullanici_hesap('3', 'TWITTER', 'abcd'), kullanici_hesap('4', 'LINKEDIN', 'efgh')));

INSERT INTO kullanici
VALUES
  (2, 'USER',
   kullanici_hesap_type(kullanici_hesap('1', 'FACEBOOK', 'face'), kullanici_hesap('2', 'TWITTER', 'twt')));

COMMIT;

Yukarıdaki insert ifadesine dikkat ettiyseniz bir önceki makaleme hazırladığım insert ifadesinden biraz faklı.Çünkü önceki makalemde sadece bir sütuna değer ataması yapıyorduk fakat bu konuda ise nested table içinde birden fazla sütuna değer ataması yapılıyor.
Kayıtlarımı ekledik. Şimdi sıra sorgu sonucunu kontrol etmede.
NOT: Nested table tek başına sorgulanamaz. Önceki makalemde de bahsetmiştim hatırlatmakta fayda var.
Aşağıdaki sorgu ifadesi çalışmaz. Çünkü tablo içinde buluan nested table değerimiz parse edilmelidir.

SELECT * FROM kullanici;

Fakat bu sorgu ifadesi yerine aşağıdaki sorgu ifadesi çalışır ama tek başına değer döndürmez

SELECT * FROM TABLE(kullanici_hesap_type());

Şimdi nested table ile nasıl sorgu sonucu alabiliriz ve değerleri görebiliriz onu hazırlayalım.

SELECT k.id, k.adi, h.*
  FROM kullanici k, TABLE(k.hesaplar) h
 ORDER BY k.id, h.hesap_id ASC;

Bu sorgumuzun sonucu aşağıdaki gibi olacaktır.

ID ADI HESAP_ID HESAP SIFRE
1 ADMIN 1 WORDPRESS 1234
1 ADMIN 2 FACEBOOK 5678
1 ADMIN 3 TWITTER abcd
1 ADMIN 4 LINKEDIN efgh
2 USER 1 FACEBOOK face
2 USER 2 TWITTER twt

Manuel olarak eklediğimi bu kayıtları sistemde yazacağımız bir uygulama ya da bir declare ile de otomatik ve dinamik olarak da tabloya ekleyebiliriz. Örneğin aşağıdaki declare ile bunun nasıl olduğunu ve sorgu sonucuna bakalım. Daha önceki makalemde de bahsetmiştim. Bu durum her iki nested table kullanımı için de uygulanabilinir.

DECLARE
  max_kayit NUMBER;
BEGIN
  SELECT COUNT(1) INTO max_kayit FROM kullanici;
  FOR i IN 1 .. max_kayit LOOP
    INSERT INTO kullanici
    VALUES
      (i + max_kayit, i || '.Loop',
       kullanici_hesap_type(kullanici_hesap('1', 'WORDPRESS', '1234'), kullanici_hesap('2', 'FACEBOOK', '5678'),
       kullanici_hesap('3', 'TWITTER', 'abcd'), kullanici_hesap('4', 'LINKEDIN', 'efgh')));
  END LOOP;
  COMMIT;
END;

Sorgumuzu tekrar çalıştıralım ve sonucumuza bir göz atalım.

ID ADI HESAP_ID HESAP SIFRE
1 ADMIN 1 WORDPRESS 1234
1 ADMIN 2 FACEBOOK 5678
1 ADMIN 3 TWITTER abcd
1 ADMIN 4 LINKEDIN efgh
2 USER 1 FACEBOOK face
2 USER 2 TWITTER twt
3 1.Loop 1 WORDPRESS 1234
3 1.Loop 2 FACEBOOK 5678
3 1.Loop 3 TWITTER abcd
3 1.Loop 4 LINKEDIN efgh
4 2.Loop 1 WORDPRESS 1234
4 2.Loop 2 FACEBOOK 5678
4 2.Loop 3 TWITTER abcd
4 2.Loop 4 LINKEDIN efgh

Görüldüğü gibi ister static olarak ister dinamik olarak olsun nested table içeren tablomuza normal bir tablo gibi kayıt ekleyebiliyoruz.
Kolay gelsin

Reklamlar
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: