Pemahaman tentang penggunaan xml dalam database,MENGGUNAKAN KLAUSA FOR XML
PENGGUNAAN KLAUSA OPENXML
MEMBUAT DOKUMEN XML PADA SQL SERVER
PENGGUNAAN XQUERY
2. Sunday, April 22, 2018 Riza Muhammad Nurman 2
CONTENT
MENGGUNAKAN KLAUSA FOR XML
PENGGUNAAN KLAUSA OPENXML
MEMBUAT DOKUMEN XML PADA SQL SERVER
PENGGUNAAN XQUERY
3. Sunday, April 22, 2018 Riza Muhammad Nurman 3
MENGGUNAKAN KLAUSA FOR XML
• Dalam SQL Query, data dapat ditampilkan dalam bentuk XML
dengan menggunakan klausa FOR XML.
• FOR XML query memiliki beberapa tipe yang dapat dipilih
bergantung pada bentuk tampilan hasil yang diinginkan.
• Beberapa tipe dari query FOR XML adalah:
– FOR XML RAW
– FOR XML AUTO
– FOR XML PATH
– FOR XML EXPLISIT
4. Sunday, April 22, 2018 Riza Muhammad Nurman 4
FOR XML RAW
SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID]
,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt]
,[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML RAW
<row PurchaseOrderID="4012" Status="2" EmployeeID="231"
VendorID="29" ShipMethodID="3"
OrderDate="2004-07-25T00:00:00" ShipDate="2004-08-
19T00:00:00" SubTotal="997680.0000"
TaxAmt="79814.4000" Freight="19953.6000"
TotalDue="1097448.0000" />
FOR XML RAW menghasilkan data dalam bentuk atribut yang dikelompokkan
dalam elemen <row>
5. Sunday, April 22, 2018 Riza Muhammad Nurman 5
<row>
<PurchaseOrderID>4012</PurchaseOrderID>
<Status>2</Status>
<EmployeeID>231</EmployeeID>
<VendorID>29</VendorID>
<ShipMethodID>3</ShipMethodID>
<OrderDate>2004-07-25T00:00:00</OrderDate>
<ShipDate>2004-08-19T00:00:00</ShipDate>
<SubTotal>997680.0000</SubTotal>
<TaxAmt>79814.4000</TaxAmt>
<Freight>19953.6000</Freight>
<TotalDue>1097448.0000</TotalDue>
</row>
SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID]
,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt]
,[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML RAW, ELEMENTS
FOR XML RAW - 2
6. Sunday, April 22, 2018 Riza Muhammad Nurman 6
<Orders>
<Order>
<PurchaseOrderID>4012</PurchaseOrderID>
<Status>2</Status>
<EmployeeID>231</EmployeeID>
<VendorID>29</VendorID>
<ShipMethodID>3</ShipMethodID>
<OrderDate>2004-07-25T00:00:00</OrderDate>
<ShipDate>2004-08-19T00:00:00</ShipDate>
<SubTotal>997680.0000</SubTotal>
<TaxAmt>79814.4000</TaxAmt>
<Freight>19953.6000</Freight>
<TotalDue>1097448.0000</TotalDue>
</Order>
</Orders>
SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID]
,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt]
,[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML RAW('Order'), ROOT('Orders') , ELEMENTS
FOR XML RAW - 3
7. Sunday, April 22, 2018 Riza Muhammad Nurman 7
SELECT [PurchaseOrderID],[Status],[EmployeeID],[VendorID]
,[ShipMethodID],[OrderDate],[ShipDate],[SubTotal],[TaxAmt]
,[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML RAW('Order'), ROOT('Orders') , ELEMENTS, XMLSCHEMA
FOR XML RAW - 4
8. Sunday, April 22, 2018 Riza Muhammad Nurman 8
FOR XML AUTO
• FOR XML RAW tidak dapat digunakan jika data yang dihasilkan dari
query tersebut berbentuk nested data
• Perbedaan FOR XML RAW dan FOR XML AUTO akan terlihat jika
query digunakan untuk menampilkan data dari dua tabel yang saling
terhubung
• Contoh :
• query FOR XML AUTO berikut yang digunakan untuk menampilkan
data dari tabel PurchaseOrderHeader dan PurchaseOrderDetail yang
dihubungkan dengan Join
9. Sunday, April 22, 2018 Riza Muhammad Nurman 9
FOR XML AUTO - 2
SELECT
PO.PurchaseOrderID,PO.Status,PO.EmployeeID,PO.VendorID
,PO.ShipMethodIDPO.OrderDate,PO.ShipDate,PO.SubTotal,PO.TaxA
mt,
PO.Freight,PO.TotalDue,POD.OrderQty,POD.ProductID,POD.UnitPr
ice
FROM Purchasing.PurchaseOrderHeader PO INNER JOIN
Purchasing.PurchaseOrderDetail POD
ON PO.PurchaseOrderID = POD.PurchaseOrderID
WHERE PO.TotalDue > 1000000
FOR XML AUTO, ROOT('Orders')
10. Sunday, April 22, 2018 Riza Muhammad Nurman 10
FOR XML AUTO - 3
<Orders>
<PurchaseOrderHeader PurchaseOrderID="4012" Status="2"
EmployeeID="231" VendorID="29" ShipMethodID="3"
OrderDate="2004-07-25T00:00:00" ShipDate="2004-08-
19T00:00:00"
SubTotal="997680.0000" TaxAmt="79814.4000"
Freight="19953.6000" TotalDue="1097448.0000">
<PurchaseOrderDetail OrderQty="6000" ProductID="881"
UnitPrice="41.5700" />
<PurchaseOrderDetail OrderQty="6000" ProductID="882"
UnitPrice="41.5700" />
<PurchaseOrderDetail OrderQty="6000" ProductID="883"
UnitPrice="41.5700" />
<PurchaseOrderDetail OrderQty="6000" ProductID="884"
UnitPrice="41.5700" />
</PurchaseOrderHeader>
</Orders>
11. Sunday, April 22, 2018 Riza Muhammad Nurman 11
FOR XML EXPLICIT
• Opsi EXPLICIT dapat digunakan untuk berbagai macam hal untuk
dapat menghasilkan data dalam format XML
12. Sunday, April 22, 2018 Riza Muhammad Nurman 12
FOR XML PATH
• FOR XML PATH dapat digunakan untuk menampilkan data dalam
bentuk nested XML yang terdiri dari elemen dan atribut menjadi lebih
mudah
• Contoh query yang menampilkan kolom PurchaseOrderID, Status
dan EmployeeID dalam bentuk atribut
SELECT [PurchaseOrderID] [@PurchaseOrderID],
[Status] [@Status],[EmployeeID][@EmployeeID],
[VendorID] ,[ShipMethodID],[OrderDate],[ShipDate],
[SubTotal],[TaxAmt],[Freight],[TotalDue]
FROM [Purchasing].[PurchaseOrderHeader]
WHERE [TotalDue] > 1000000
FOR XML PATH('Order'), ROOT('Orders')
13. Sunday, April 22, 2018 Riza Muhammad Nurman 13
FOR XML PATH - 2
<Orders>
<Order PurchaseOrderID="4012" Status="2" EmployeeID="231">
<VendorID>29</VendorID>
<ShipMethodID>3</ShipMethodID>
<OrderDate>2004-07-25T00:00:00</OrderDate>
<ShipDate>2004-08-19T00:00:00</ShipDate>
<SubTotal>997680.0000</SubTotal>
<TaxAmt>79814.4000</TaxAmt>
<Freight>19953.6000</Freight>
<TotalDue>1097448.0000</TotalDue>
</Order>
</Orders>
14. Sunday, April 22, 2018 Riza Muhammad Nurman 14
FOR XML PATH - 3
• FOR XML PATH juga dapat digunakan untuk
mengkontrol nesting document.
• Contoh menampilkan data dari dua tabel yaitu
PurchaseOrderHeader dan
PurchaseOrderDetail
– data dari tabel PurchaseOrderHeader dituliskan
dalam bentuk atribut
– data dari tabel PurchaseOrderDetail dituliskan
dalam bentuk elemen.
15. Sunday, April 22, 2018 Riza Muhammad Nurman 15
PENGGUNAAN KLAUSA OPENXML
• Dokumen XML dan isinya dapat disisipkan ke dalam tabel database standar.
• Proses ini terdiri atas tiga tahapan dan biasanya dikenal dengan istilah
shredding
1. Langkah pertama ini dapat dianalogikan
dengan melakukan pemuatan
DOMDOcument object
2. Langkah kedua adalah langkah
memproses dokumen XML
3. Langkah terakhir adalah melakukan
penghapus representasi XML dalam
tabel internal di SQL Server
16. Sunday, April 22, 2018 Riza Muhammad Nurman 16
PENGGUNAAN KLAUSA OPENXML - 2
• Salah satu keuntungan dari penggunaan OPENXML adalah dapat
digunakan dengan stored procedure yang memiliki parameter dalam
bentuk array.
• Contoh jika terdapat sebuah aplikasi e-commerce yang
memungkinkan pembeli untuk memilih barang dan jumlah barang
yang ingin dibeli dan menyimpannya dalam sebuah keranjang
pembelian
• Setelah pembeli menyelesaikan proses belanja, maka nilai yang
tersimpan dalam keranjang belanja tersebut perlu dikirimkan ke
sebuah stored procedure agar bisa dilakukan perhitungan.
17. Sunday, April 22, 2018 Riza Muhammad Nurman 17
PENGGUNAAN KLAUSA OPENXML - 3
18. Sunday, April 22, 2018 Riza Muhammad Nurman 18
MEMBUAT DOKUMEN XML PADA SQL SERVER
create table dbo.Docs
(
DocID int identity primary key,
XMLDoc XML
)
insert docs
values('<Person><FirstName>Joe</FirstName>
<LastName>Fawcett</LastName></Person>')
19. Sunday, April 22, 2018 Riza Muhammad Nurman 19
PENGGUNAAN XQUERY
• Data yang memiliki tipe data XML dapat diperlakukan sama seperti
data lainnya, dalam hal pemodifikasian dan juga penghapusan
dengan menggunakan Xquery
• Perintah XQuery biasanya diletakkan sebagai tambahan pada T-SQL.
20. Sunday, April 22, 2018 Riza Muhammad Nurman 20
PENGGUNAAN XQUERY – MENGHAPUS DATA
DECLARE @myDoc XML
SET @myDoc = '<Person><FirstName>Joe</FirstName>
<LastName>Fawcett</LastName></Person>'
SELECT @myDoc
SET @myDoc.modify(' delete /Person/*[2]')
SELECT @myDoc
21. Sunday, April 22, 2018 Riza Muhammad Nurman 21
PENGGUNAAN XQUERY – MENAMBAH DATA
DECLARE @myDoc XML
SET @myDoc = '<Person><LastName>Fawcett</LastName></Person>'
SELECT @myDoc
SET @myDoc.modify(' insert <FirstName>Joe</FirstName> as first
into /Person[1]')
SELECT @myDoc
DECLARE @myDoc XML
SET @myDoc = '<Person><LastName>Fawcett</LastName></Person>'
SELECT @myDoc
SET @myDoc.modify('insert <FirstName>Joe</FirstName>
before (/Person/LastName)[1]')
SELECT @myDoc
22. Sunday, April 22, 2018 Riza Muhammad Nurman 22
PENGGUNAAN XQUERY – MEMODIFIKASI DATA
DECLARE @myDoc XML
SET @myDoc = '<Person><FirstName>Joe</FirstName>
<LastName>Fawcett</LastName></Person> '
SELECT @myDoc
SET @myDoc.modify('replace value of (/Person/FirstName/text())[1]
with "Gillian"')
SELECT @myDoc