Pada posting generate xml sebelumnya, saya memakai dbms_xmlquery untuk generate xml. Namun setelah ditinjau lebih jauh.. ternyata ada beberapa keterbatasan.. dimana bila ingin menyatukan dua query menjadi satu file xml akan terjadi error.
Query1.sql
set linesize 1060;
set pagesize 1000;
set long 1000 ;
set heading off;
set serveroutput off;
set feedback off;
declare
queryCtx1 DBMS_XMLquery.ctxType;
queryCtx2 DBMS_XMLquery.ctxType;
coba clob;
coba1 clob;
begin
queryCtx1 := DBMS_XMLQuery.newContext('select ID_JALAN, LOG, MI_PRINX, GEOLOC from JALAN where ROWID in (select M_ROW$$ from MLOG$_JALAN)');
queryCtx2 := DBMS_XMLQuery.newContext('select mi_prinx from MLOG$_JALAN where dmltype$$=''D''');
coba:= DBMS_XMLQuery.GetXML(queryCtx1);
coba1:= DBMS_XMLQuery.GetXML(queryCtx2);
dbms_output.put_line(coba);
dbms_output.put_line(coba1);
end;
/
set serveroutput on;
spool D:\xml\xml_JALAN11032008-144351.xml
/
spool off
file xml yang dihasilkan dari script diatas adalah..
xml_JALAN11032008-144351.xml
Jika dilihat pada bagian yang ditandai dengan warna merah, maka terlihat letak kesalahan yang dihasilkan. Adanya <?xml version = '1.0'?> kedua menyebabkan error pada file xml. Oleh karena itu, untuk mengatasi permasalahan diatas maka saya menggunakan cara yang agak brutal pada query yang menggunakan xmlelement() sebagai generator xml-nya.
Query2.sql
set linesize 1060;
set pagesize 1000;
set long 2000 ;
set heading off;
set serveroutput on;
set feedback off;
begin
dbms_output.put_line('');
end;
/
spool D:\ario\batch2\coba.xml
/
spool off
select q'[
spool D:\ario\batch2\coba.xml app
/
spool off
select '
spool D:\ario\batch2\coba.xml app
/
spool off
select '
spool D:\ario\batch2\coba.xml app
/
spool off
select q'[]' from dual;
spool D:\ario\batch2\coba.xml app
/
spool off
file xml yang dihasilkan adalah sebagai berikut
coba.xml
<?xml version = '1.0'?> <ROWSET> <ROW> <DMLTYPE>U</DMLTYPE> <ID_JALAN>28</ID_JALAN> <NM_JALAN></NM_JALAN> <LOG>Ok1</LOG> <MI_STYLE></MI_STYLE> <MI_PRINX>28</MI_PRINX> <GEOLOC> <SDO_GEOMETRY> <SDO_GTYPE>2002</SDO_GTYPE> <SDO_SRID>8307</SDO_SRID> <SDO_POINT><X>0</X><Y>0</Y></SDO_POINT> <SDO_ELEM_INFO> <NUMBER>1</NUMBER> <NUMBER>2</NUMBER> <NUMBER>1</NUMBER> </SDO_ELEM_INFO> <SDO_ORDINATES> <NUMBER>106.77932388</NUMBER> <NUMBER>-6.27297003</NUMBER> <NUMBER>106.77934296</NUMBER> <NUMBER>-6.27295104</NUMBER> <NUMBER>106.77948696</NUMBER> <NUMBER>-6.27294798</NUMBER> <NUMBER>106.77949596</NUMBER> <NUMBER>-6.27293403</NUMBER> <NUMBER>106.77948984</NUMBER> <NUMBER>-6.27274602</NUMBER> <NUMBER>106.77945312</NUMBER> <NUMBER>-6.272748</NUMBER> <NUMBER>106.77945204</NUMBER> <NUMBER>-6.27260904</NUMBER> </SDO_ORDINATES> </SDO_GEOMETRY> </GEOLOC> </ROW> <ROW> <DMLTYPE>U</DMLTYPE> <ID_JALAN>30</ID_JALAN> <NM_JALAN></NM_JALAN> <LOG>Ok1</LOG> <MI_STYLE></MI_STYLE> <MI_PRINX>30</MI_PRINX> <GEOLOC> <SDO_GEOMETRY> <SDO_GTYPE>2002</SDO_GTYPE> <SDO_SRID>8307</SDO_SRID> <SDO_POINT><X>0</X><Y>0</Y></SDO_POINT> <SDO_ELEM_INFO> <NUMBER>1</NUMBER> <NUMBER>2</NUMBER> <NUMBER>1</NUMBER> </SDO_ELEM_INFO> <SDO_ORDINATES> <NUMBER>106.77797388</NUMBER> <NUMBER>-6.27359499</NUMBER> <NUMBER>106.77798</NUMBER> <NUMBER>-6.27357096</NUMBER> <NUMBER>106.77798108</NUMBER> <NUMBER>-6.27318297</NUMBER> </SDO_ORDINATES> </SDO_GEOMETRY> </GEOLOC> </ROW> <ROW> <DMLTYPE>D</DMLTYPE> <MI_PRINX>27</MI_PRINX> </ROW> </ROWSET>
Untuk menghasilkan baris pertama xml yaitu tulisan <?xml version = '1.0'?> digunakan dbms_output.put_line() dalam procedure agar xml yang dihasilkan tidak error ketika ditampilkan pada browser firefox. Karena jika menggunakan perintah select biasa untuk menghasilkan tulisan <?xml version = '1.0'?> file xml akan error ketika dibuka dengan browser firefox karena adanya satu baris kosong di baris pertama file xml. Selain itu settingan long juga harus diperbesar menjadi 2000, karena query2.sql menghasilkan satu row xml memanjang trus ke samping tanpa ada karakter new line sebagai separator antar kolom.
0 komentar:
Posting Komentar