XML verisini parse ederek Oracle’da tabloya insert etme
Önceki yazımda Oracle ‘da tablodan veriyi XML formunda çekmeyi anlatmıştım; bu yazımda ise aynı işlemin tersini yani XML formunda gelen bir stringin içinden veriyi parse ederek tabloya atma işlemini göstereceğim .
Daha anlaşılır olması açısından önceki tablomuzu kullanalım :
CREATE TABLE DBT
(
NUM NUMBER,
ADI VARCHAR2(14),
SOYADI VARCHAR2(22),
TAR DATE
);
Table created.
Şöyle bir xml imiz olsun :
<xml_formu>
<NUM>1</NUM>
<ADI>Ercan</ADI>
<SOYADI>Yazgan</SOYADI>
<TAR>2010-12-21</TAR>
</xml_formu>
Bu XML deki dataları tablomuza insert etmek için iki çeşit yol göstereceğim.
1) XML den her satırı ayrı ayrı parse edip insert yapmak.
DECLARE
V_XML CLOB(500) := '<xml_formu>
<NUM>1</NUM>
<ADI>Ercan</ADI>
<SOYADI>Yazgan</SOYADI>
<TAR>2010-12-21</TAR>
</xml_formu>';
BEGIN
INSERT INTO DBT(NUM, ADI, SOYADI, TAR) VALUES(
XMLTYPE(V_XML).EXTRACT('/xml_formu/NUM/text()').GETNUMBERVAL(),
XMLTYPE(V_XML).EXTRACT('/xml_formu/ADI/text()').GETSTRINGVAL(),
XMLTYPE(V_XML).EXTRACT('/xml_formu/SOYADI/text()').GETSTRINGVAL(),
TO_DATE(XMLTYPE(V_XML).EXTRACT('/xml_formu/TAR/text()').GETSTRINGVAL())
);
COMMIT;
END;
PL/SQL procedure successfully completed.
Bu PL/SQL bloğunda , XML yapısının içindeki her datayı satır satır insert etme işlemi yapılıyor. Bu işlemi bir de şu şekilde yapabiliriz :
2) XML bloğunundaki datayı cursor’a taşıyarak cursor’dan okumak
DECLARE
V_XML CLOB := '<xml_formu>
<NUM>1</NUM>
<ADI>Ercan</ADI>
<SOYADI>Yazgan</SOYADI>
<TAR>2010-12-21</TAR>
</xml_formu>';
CURSOR C1 IS
select extractvalue(column_value,'/xml_formu/NUM') Numarasi,
extractvalue(column_value,'/xml_formu/ADI') Adi,
extractvalue(column_value,'/xml_formu/SOYADI') Soyadi,
extractvalue(column_value,'/xml_formu/TAR') Tarih
from table (xmlsequence(xmltype(V_XML).extract('/xml_formu')));
BEGIN
FOR RW IN C1
LOOP
INSERT INTO DBT(NUM, ADI, SOYADI, TAR) VALUES(
RW.NUMARASI,
RW.ADI,
RW.SOYADI,
to_date(RW.TARIH)
);
COMMIT;
END LOOP;
END;
PL/SQL procedure successfully completed.
Bu yol, çoklu veri alırken daha faydalı bir yoldur. Çünkü milyon satırlık bir xml kaydı geldiğinde o XML in içerisindeki milyon tane datayı ancak cursor vasıtasıyla loop kullanarak parse edersiniz, o yüzden bu iki yolu da göstereyim dedim. “hah işte bunu arıyordum” demeniz dileğiyle J
Hiç yorum yok:
Yorum Gönder