11 Şubat 2011 Cuma

Oracle XML -1


Oracle Table’lardan veriyi XML formunda çekme

CREATE TABLE DBT
(
  NUM     NUMBER,
  ADI     VARCHAR2(14),
  SOYADI  VARCHAR2(22),
  TAR     DATE
);
Şeklinde bir tablo oluşturalım.
Şimdi de tablomuza aşağıdaki kayıtları ekleyelim.
Insert into DBT
   (NUM, ADI, SOYADI,TAR)
 Values
   (1, 'Ercan', 'Yazgan', trunc(sysdate));
Insert into DBT
   (NUM, ADI, SOYADI)
 Values
   (2, 'yusuf', 'Arslan', trunc(sysdate));
Insert into DBT
   (NUM, ADI, SOYADI)
 Values
   (3, 'Samet', 'Aslan',trunc(sysdate));


Tabloya bir bakalım :)

select * from dbtable

Num     Ad         Soyad   Tar
-----      ------     -------   -------------
1          Ercan    Yazgan  21/12/2010
2          yusuf    Arslan   21/12/2010
3          Samet   Aslan    21/12/2010

Şimdi gelelim kuru fasulyenin faydalarına :) Biz bu var olan veriyi xml formunda görmek istiyoruz. Nerede kullanıldığına gelince; örnek olarak web service ile çalışan projelerde veriyi göndermek için xml formu kullanılır ve data transferi yapabilmek için datayı xml formuna sokmak gerekir. Bunun için biraz xml nedir gibi bir sorunun cevabını da vermek gerektiğini şu an hissettim :)

Xml bir veri taşıma formudur diyebiliriz. XML herhangi bir programlama dili veya bir script dil değildir.
Sadece, verinin platformlar arası anlaşılır, basit ve ortak bir görünümde taşınabilmesini sağlayan bir formdur. Mesela “Personel” adlı bi tablomuzda adı ve soyadı kolonları olsun. Hangi veritabanında tutarsak tutalım bilgisayar bu datanın aşağıdaki şekilde oldugunu anlamaz.

Personel

Adı       Soyadı
----       ---------
Ercan    Yazgan


Yani Veri formunu kendi kendine çözemez, adı : ercan soyadı : yazgan oldugunu sınıflayamaz. Fakat bu veri şu formda olduğu zaman tüm kaynaklar, veriyi anlayabilir ve sınıflayabilir :

<Personel>
            <adı>ercan</adı>
            <soyadı>yazgan</soyadı>
</Personel>

İşte bu xml formu görüldüğü gibi veriyi belli bir sınıf kapsamında hiyerarşiye sokuyor.

XML in ne oldugundan kısaca bahsettikten sonra lafı fazla uzatmadan konuya döneyim. Yukarıda oluşturduğumuz tablonun datasını xml formuyla çekmek için basitçe aşağıdaki kodu sorgulayabiliriz :

select xmlelement("xml_formu",
         xmlforest(d.NUM, d.ADI, d.SOYADI, d.TAR)
)
from dbtable d;

--Gelen sonuç :

<xml_formu>
<NUM>1</NUM>
<ADI>Ercan</ADI>
<SOYADI>Yazgan</SOYADI>
<TAR>2010-12-21</TAR>
</xml_formu>
<xml_formu>
<NUM>2</NUM>
<ADI>yusuf</ADI>
<SOYADI>Arslan</SOYADI>
<TAR>2010-12-21</TAR>
</xml_formu>
<xml_formu>
<NUM>3</NUM>
<ADI>Samet</ADI>
<SOYADI>Aslan</SOYADI>
<TAR>2010-12-21</TAR>
</xml_formu>

Burada bir konuya daha değinmek istiyorum, xmlelement herbir satırı bir element olarak görmek için kullanılır yani hersatırı başlıklamak gibi düşünebiliriz. Yoksa şu şekilde de bir sorgu yazabiliriz :

select   xmlforest(d.NUM, d.ADI, d.SOYADI, d.TAR)
from dbtable d;

--sonuç :

<NUM>1</NUM>
<ADI>Ercan</ADI>
<SOYADI>Yazgan</SOYADI>
<TAR>2010-12-21</TAR>
<NUM>2</NUM>
<ADI>yusuf</ADI>
<SOYADI>Arslan</SOYADI>
<TAR>2010-12-21</TAR>
<NUM>3</NUM>
<ADI>Samet</ADI>
<SOYADI>Aslan</SOYADI>
<TAR>2010-12-21</TAR>

Şeklinde gelecektir.

Umarım faydalı olmuştur, bir sonraki yazımda ise xml formundaki bir stringin içerisinden veriyi parse edip tabloya aktarmakla ilgili bir bilgi paylaşıyor olacağım.

Hiç yorum yok:

Yorum Gönder