Dapatkah Anda menyimpan xml di mysql?

Oracle XML DB adalah seperangkat teknologi Oracle Database yang menyediakan kemampuan XML untuk administrator dan pengembang database. Ini memberikan dukungan XML asli dan fitur lainnya termasuk

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
1 asli dan
CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
2

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
1 mewakili dokumen XML dalam database yang dapat diakses dari SQL. Ini mendukung standar seperti Skema XML, XPath, XQuery, XSLT, dan DOM

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
2 mendukung semua bentuk data XML dari yang sangat terstruktur hingga yang sepenuhnya tidak terstruktur

Data XML dapat berbasis skema atau non-skema. XML berbasis skema mematuhi Definisi Skema XSD dan harus divalidasi. Data XML berbasis non-skema tidak memerlukan validasi

Menurut dokumentasi Oracle, aspek yang harus Anda pertimbangkan saat menggunakan XML adalah

  • Cara Anda ingin menyimpan data XML

  • Struktur data XML Anda

  • Bahasa yang digunakan untuk mengimplementasikan aplikasi Anda

  • Cara Anda ingin memproses data XML

Fitur yang paling umum adalah

  • Model penyimpanan — XML Biner

  • Pengindeksan — indeks pencarian XML,

    CREATE VIEW warehouse_view AS
    SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
    2 dengan komponen terstruktur

  • Bahasa basis data — SQL, dengan fungsi SQL/XML

  • Bahasa XML — XQuery dan XSLT

Model Penyimpanan — XML Biner

Juga disebut persistensi pasca-parse, ini adalah model penyimpanan default untuk Oracle XML DB. Ini adalah format biner post-parse yang dirancang khusus untuk data XML. XML Biner adalah skema XML-sadar dan penyimpanannya sangat fleksibel

Anda dapat menggunakannya untuk dokumen berbasis skema XML atau untuk dokumen yang tidak didasarkan pada skema XML. Anda dapat menggunakannya dengan skema XML yang memungkinkan variabilitas data tinggi atau yang berkembang pesat atau tidak terduga

Model penyimpanan ini juga menyediakan pembaruan parsial yang efisien dan evaluasi kueri streaming

Opsi penyimpanan lainnya adalah penyimpanan objek-relasional dan lebih efisien saat menggunakan XML sebagai data terstruktur dengan jumlah minimum perubahan dan kueri yang berbeda. Untuk informasi selengkapnya, lihat Panduan Pengembang Oracle XML DB

Pengindeksan — indeks pencarian XML, XMLIndex dengan komponen terstruktur

Indeks Pencarian XML menyediakan pencarian teks lengkap melalui data XML. Oracle merekomendasikan menyimpan data XMLType sebagai Binary XML dan menggunakan XQuery Full Text (XQFT)

Jika Anda tidak menggunakan penyimpanan biner dan data Anda terstruktur XML, Anda dapat menggunakan indeks teks Oracle, menggunakan fungsi string biasa seperti berisi, atau menggunakan XPath

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
6

Jika Anda ingin menggunakan predikat seperti

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
7 dalam klausa
CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
8 Anda, Anda harus membuat indeks pencarian XML

Contoh

Contoh berikut membuat objek direktori SQL, yang merupakan nama logika dalam database untuk direktori fisik di komputer host. Direktori ini berisi file XML. Contoh menyisipkan konten XML dari file ________0______9 ke dalam tabel pesanan

Buat tabel XMLType

CREATE TABLE orders OF XMLType;
CREATE DIRECTORY xmldir AS path_to_folder_containing_XML_file;
INSERT INTO orders VALUES (XMLType(BFILENAME('XMLDIR',
  'purOrder.xml'),NLS_CHARSET_ID('AL32UTF8')));
_

Buat tabel dengan kolom

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
_1

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);

Buat tampilan

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
_1

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;

Masukkan data ke dalam kolom

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
1

INSERT INTO xwarehouses
VALUES(100, '

Po_1
John

1033, Main Street
Sunnyvale
CA
')

Buat indeks pencarian XML dan kueri dengan XQuery

  1. Setelah pengguna mendapatkan semua hak istimewa yang diperlukan dan mengatur parameter yang tepat dalam skema teks Oracle

  2. Buat bagian dan preferensi teks Oracle

  3. Buat indeks pencarian XML (indeks reguler yang terkait dengan objek)

BEGIN
CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
END;
/
CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('storage pref section group secgroup');

Kueri menggunakan indeks sebelumnya di XQuery. XQuery adalah standar W3C untuk menghasilkan, membuat kueri, dan memperbarui XML, bahasa kueri alami untuk XML

Cari di

INSERT INTO xwarehouses
VALUES(100, '

Po_1
John

1033, Main Street
Sunnyvale
CA
')
_3 untuk nilai yang mengandung Besar dan Jalan lalu kembalikan tag Judulnya (hanya di pilih)

SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
2 dengan komponen terstruktur digunakan untuk kueri yang memproyeksikan pulau terstruktur tetap dari konten XML, bahkan jika data di sekitarnya relatif tidak terstruktur. Komponen
CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
2 terstruktur mengatur pulau-pulau tersebut dalam format relasional

Pastikan Anda menentukan bagian data XML yang Anda telusuri dalam kueri. Ini berlaku untuk data berbasis skema XML dan non-skema

Buat

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
_2 dengan komponen terstruktur

  1. Buat basis

    CREATE VIEW warehouse_view AS
    SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
    2 pada tabel
    INSERT INTO xwarehouses
    VALUES(100, '
    
    Po_1
    John
    
    1033, Main Street
    Sunnyvale
    CA
    ')
    8.
    INSERT INTO xwarehouses
    VALUES(100, '
    
    Po_1
    John
    
    1033, Main Street
    Sunnyvale
    CA
    ')
    9 adalah data XML yang disimpan dalam tabel. Semua definisi tipe dan Objek XML berasal dari skema XDB di database

  2. Gunakan parameter

    BEGIN
    CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
    CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
    CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
    CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
    SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
    CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
    STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
    END;
    /
    CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
    INDEXTYPE IS CTXSYS.CONTEXT
    PARAMETERS('storage pref section group secgroup');
    0 untuk menambahkan struktur lain ke indeks

  3. Buat tabel (

    BEGIN
    CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
    CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
    CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
    CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
    SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
    CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
    STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
    END;
    /
    CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
    INDEXTYPE IS CTXSYS.CONTEXT
    PARAMETERS('storage pref section group secgroup');
    1 dan
    BEGIN
    CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
    CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
    CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
    CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
    SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
    CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
    STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
    END;
    /
    CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
    INDEXTYPE IS CTXSYS.CONTEXT
    PARAMETERS('storage pref section group secgroup');
    2) untuk menyimpan data indeks sebagai data terstruktur. Di sebelah setiap nama tabel terdapat akar PATH dalam data XML (/PurchaseOrder dan /LineItem). Setelah itu, setiap kolom adalah PATH lain di root ini. Perhatikan bahwa dalam tabel
    BEGIN
    CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
    CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
    CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
    CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
    SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
    CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
    STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
    END;
    /
    CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
    INDEXTYPE IS CTXSYS.CONTEXT
    PARAMETERS('storage pref section group secgroup');
    _1 kolom terakhir adalah XMLType. Dibutuhkan semuanya di bawah PATH ini dan menyimpannya dalam tipe data XML

  4. Tambahkan grup struktur ke indeks

CREATE INDEX po_xmlindex_ix ON po_binxml (OBJECT_VALUE)
INDEXTYPE IS XDB.XMLIndex PARAMETERS ('PATH TABLE path_tab');
BEGIN
DBMS_XMLINDEX.registerParameter(
'myparam',
'ADD_GROUP GROUP po_item
XMLTable po_idx_tab ''/PurchaseOrder''
COLUMNS reference VARCHAR2(30) PATH ''Reference'',
requestor VARCHAR2(30) PATH ''Requestor'',
username VARCHAR2(30) PATH ''User'',
lineitem XMLType PATH ''LineItems/LineItem'' VIRTUAL
XMLTable po_index_lineitem ''/LineItem'' PASSING lineitem
COLUMNS itemno BINARY_DOUBLE PATH ''@ItemNumber'',
description VARCHAR2(256) PATH ''Description'',
partno VARCHAR2(14) PATH ''Part/@Id'',
quantity BINARY_DOUBLE PATH ''Part/@Quantity'',
unitprice BINARY_DOUBLE PATH ''Part/@UnitPrice''');
END;
/

ALTER INDEX po_xmlindex_ix PARAMETERS('PARAM myparam');

Untuk informasi lebih lanjut, lihat di dokumentasi Oracle

Fungsi SQL/XML

Oracle Database menyediakan dua grup utama SQL/XML

  • Fungsi penerbitan SQL/XML

  • Permintaan SQL/XML dan memperbarui fungsi

Fungsi Penerbitan SQL/XML

Fungsi penerbitan SQL/XML adalah hasil SQL yang dihasilkan dari data XML. Mereka juga disebut fungsi generasi SQL/XML

XMLQuery digunakan dalam klausa

BEGIN
CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
END;
/
CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('storage pref section group secgroup');
_4 untuk mengembalikan hasilnya sebagai data XMLType. Lihat contoh sebelumnya untuk membuat indeks pencarian XML

XMLTable digunakan dalam klausa

BEGIN
CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
END;
/
CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('storage pref section group secgroup');
_5 untuk mendapatkan hasil menggunakan XQuery, dan menyisipkan hasilnya ke dalam tabel virtual. Fungsi ini dapat memasukkan data ke dalam tabel database yang ada

SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
7 digunakan dalam klausa
CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
8 untuk memeriksa apakah ekspresi XQuery mengembalikan urutan kueri yang tidak kosong. Jika ya, ia mengembalikan
BEGIN
CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
END;
/
CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('storage pref section group secgroup');
8. Jika tidak, ia mengembalikan
BEGIN
CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
END;
/
CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('storage pref section group secgroup');
_9. Dalam contoh berikut, kueri mencari tabel
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
0 untuk
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
1 yang mana tag
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
2 diatur ke
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
3

SELECT OBJECT_VALUE FROM purchaseorder
  WHERE XMLExists('/PurchaseOrder[SpecialInstructions="Expedite"]'
  PASSING OBJECT_VALUE);

SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
4 digunakan dalam
BEGIN
CTX_DDL.create_section_group('secgroup', 'PATH_SECTION_GROUP');
CTX_DDL.set_sec_grp_attr('secgroup', 'XML_ENABLE', 'T');
CTX_DDL.create_preference('pref', 'BASIC_STORAGE');
CTX_DDL.set_attribute('pref','D_TABLE_CLAUSE', 'TABLESPACE ts_name LOB(DOC) STORE AS
SECUREFILE(TABLESPACE ts_name COMPRESS MEDIUM CACHE)');
CTX_DDL.set_attribute('pref','I_TABLE_CLAUSE','TABLESPACE ts_name LOB(TOKEN_INFO)
STORE AS SECUREFILE(TABLESPACE ts_name NOCOMPRESS CACHE)');
END;
/
CREATE INDEX po_ctx_idx ON po_binxml(OBJECT_VALUE)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('storage pref section group secgroup');
4 klausa untuk mengonversi nilai skalar yang dikembalikan dari XQuery ke
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
6,
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
7,
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
8,
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
9,
CREATE INDEX po_xmlindex_ix ON po_binxml (OBJECT_VALUE)
INDEXTYPE IS XDB.XMLIndex PARAMETERS ('PATH TABLE path_tab');
BEGIN
DBMS_XMLINDEX.registerParameter(
'myparam',
'ADD_GROUP GROUP po_item
XMLTable po_idx_tab ''/PurchaseOrder''
COLUMNS reference VARCHAR2(30) PATH ''Reference'',
requestor VARCHAR2(30) PATH ''Requestor'',
username VARCHAR2(30) PATH ''User'',
lineitem XMLType PATH ''LineItems/LineItem'' VIRTUAL
XMLTable po_index_lineitem ''/LineItem'' PASSING lineitem
COLUMNS itemno BINARY_DOUBLE PATH ''@ItemNumber'',
description VARCHAR2(256) PATH ''Description'',
partno VARCHAR2(14) PATH ''Part/@Id'',
quantity BINARY_DOUBLE PATH ''Part/@Quantity'',
unitprice BINARY_DOUBLE PATH ''Part/@UnitPrice''');
END;
/

ALTER INDEX po_xmlindex_ix PARAMETERS('PARAM myparam');
0,
CREATE INDEX po_xmlindex_ix ON po_binxml (OBJECT_VALUE)
INDEXTYPE IS XDB.XMLIndex PARAMETERS ('PATH TABLE path_tab');
BEGIN
DBMS_XMLINDEX.registerParameter(
'myparam',
'ADD_GROUP GROUP po_item
XMLTable po_idx_tab ''/PurchaseOrder''
COLUMNS reference VARCHAR2(30) PATH ''Reference'',
requestor VARCHAR2(30) PATH ''Requestor'',
username VARCHAR2(30) PATH ''User'',
lineitem XMLType PATH ''LineItems/LineItem'' VIRTUAL
XMLTable po_index_lineitem ''/LineItem'' PASSING lineitem
COLUMNS itemno BINARY_DOUBLE PATH ''@ItemNumber'',
description VARCHAR2(256) PATH ''Description'',
partno VARCHAR2(14) PATH ''Part/@Id'',
quantity BINARY_DOUBLE PATH ''Part/@Quantity'',
unitprice BINARY_DOUBLE PATH ''Part/@UnitPrice''');
END;
/

ALTER INDEX po_xmlindex_ix PARAMETERS('PARAM myparam');
1, atau ____1____0_____. Misalnya, setelah menemukan objek yang
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
2 diatur ke
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
3,
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
4 mengembalikan Referensi di setiap item sebagai
CREATE INDEX po_xmlindex_ix ON po_binxml (OBJECT_VALUE)
INDEXTYPE IS XDB.XMLIndex PARAMETERS ('PATH TABLE path_tab');
BEGIN
DBMS_XMLINDEX.registerParameter(
'myparam',
'ADD_GROUP GROUP po_item
XMLTable po_idx_tab ''/PurchaseOrder''
COLUMNS reference VARCHAR2(30) PATH ''Reference'',
requestor VARCHAR2(30) PATH ''Requestor'',
username VARCHAR2(30) PATH ''User'',
lineitem XMLType PATH ''LineItems/LineItem'' VIRTUAL
XMLTable po_index_lineitem ''/LineItem'' PASSING lineitem
COLUMNS itemno BINARY_DOUBLE PATH ''@ItemNumber'',
description VARCHAR2(256) PATH ''Description'',
partno VARCHAR2(14) PATH ''Part/@Id'',
quantity BINARY_DOUBLE PATH ''Part/@Quantity'',
unitprice BINARY_DOUBLE PATH ''Part/@UnitPrice''');
END;
/

ALTER INDEX po_xmlindex_ix PARAMETERS('PARAM myparam');
6

SELECT XMLCast(XMLQuery('/PurchaseOrder/Reference'
  PASSING OBJECT_VALUE
  RETURNING CONTENT) AS VARCHAR2(100)) "REFERENCE"
  FROM purchaseorder
  WHERE XMLExists('/PurchaseOrder[SpecialInstructions="Expedite"]'
  PASSING OBJECT_VALUE);

Untuk informasi lebih lanjut, lihat di dokumentasi Oracle

Permintaan SQL/XML dan Fungsi Pembaruan

Fungsi kueri dan pembaruan SQL/XML digunakan untuk kueri dan memperbarui konten XML sebagai bagian dari operasi SQL reguler

Untuk

CREATE INDEX po_xmlindex_ix ON po_binxml (OBJECT_VALUE)
INDEXTYPE IS XDB.XMLIndex PARAMETERS ('PATH TABLE path_tab');
BEGIN
DBMS_XMLINDEX.registerParameter(
'myparam',
'ADD_GROUP GROUP po_item
XMLTable po_idx_tab ''/PurchaseOrder''
COLUMNS reference VARCHAR2(30) PATH ''Reference'',
requestor VARCHAR2(30) PATH ''Requestor'',
username VARCHAR2(30) PATH ''User'',
lineitem XMLType PATH ''LineItems/LineItem'' VIRTUAL
XMLTable po_index_lineitem ''/LineItem'' PASSING lineitem
COLUMNS itemno BINARY_DOUBLE PATH ''@ItemNumber'',
description VARCHAR2(256) PATH ''Description'',
partno VARCHAR2(14) PATH ''Part/@Id'',
quantity BINARY_DOUBLE PATH ''Part/@Quantity'',
unitprice BINARY_DOUBLE PATH ''Part/@UnitPrice''');
END;
/

ALTER INDEX po_xmlindex_ix PARAMETERS('PARAM myparam');
_7, lihat contoh sebelumnya

Dalam contoh berikut, setelah menemukan item yang relevan dengan

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
7 di klausa set, perintah menetapkan
INSERT INTO xwarehouses
VALUES(100, '

Po_1
John

1033, Main Street
Sunnyvale
CA
')
9 ke file
SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
0 baru yang terletak di direktori
SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
1

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_0

Untuk informasi lebih lanjut, lihat di dokumentasi Oracle

SQL dan PL/SQL

Konversi SQL dan PL/SQL tercakup dalam topik SQL dan PL/SQL

Penggunaan MySQL

Dukungan Aurora MySQL untuk data tidak terstruktur adalah kebalikan dari Oracle. Ada dukungan minimal untuk XML, tetapi tipe data JSON asli dan lebih dari 25 fungsi JSON khusus

Dukungan XML

Aurora MySQL mendukung dua fungsi XML.

SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
2 dan
SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
3

SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
_2 menerima dokumen XML, atau fragmen, dan ekspresi XPATH. Fungsi mengembalikan data karakter anak atau elemen yang cocok dengan ekspresi
SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
5. Jika ada lebih dari satu kecocokan, fungsi mengembalikan konten node anak sebagai string karakter yang dibatasi spasi.
SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
2 hanya mengembalikan
SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
7 dan tidak mengembalikan tag dan sub-tag yang terdapat dalam tag yang cocok atau kontennya

Perhatikan contoh berikut

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_1

Untuk contoh sebelumnya, hasilnya terlihat seperti yang ditunjukkan berikut ini

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_2

Anda dapat menggunakan

SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
_3 untuk mengganti fragmen XML dengan fragmen lain menggunakan
SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
5 ekspresi yang mirip dengan
SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
2. Jika kecocokan ditemukan, itu mengembalikan XML baru yang diperbarui. Jika tidak ada kecocokan, atau beberapa kecocokan, XML asli dikembalikan

Perhatikan contoh berikut

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_3

Untuk contoh sebelumnya, hasilnya terlihat seperti yang ditunjukkan berikut ini

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_4

Aurora MySQL tidak mendukung sintaks MySQL

SELECT OBJECT_VALUE FROM purchaseorder
  WHERE XMLExists('/PurchaseOrder[SpecialInstructions="Expedite"]'
  PASSING OBJECT_VALUE);
1. Untuk informasi lebih lanjut, lihat Memuat data ke dalam klaster DB Amazon Aurora MySQL dari file teks dalam bucket Amazon S3 di Panduan Pengguna untuk Aurora

Ringkasan

DeskripsiOracleAurora MySQL

fungsi XML

CREATE INDEX po_xmlindex_ix ON po_binxml (OBJECT_VALUE)
INDEXTYPE IS XDB.XMLIndex PARAMETERS ('PATH TABLE path_tab');
BEGIN
DBMS_XMLINDEX.registerParameter(
'myparam',
'ADD_GROUP GROUP po_item
XMLTable po_idx_tab ''/PurchaseOrder''
COLUMNS reference VARCHAR2(30) PATH ''Reference'',
requestor VARCHAR2(30) PATH ''Requestor'',
username VARCHAR2(30) PATH ''User'',
lineitem XMLType PATH ''LineItems/LineItem'' VIRTUAL
XMLTable po_index_lineitem ''/LineItem'' PASSING lineitem
COLUMNS itemno BINARY_DOUBLE PATH ''@ItemNumber'',
description VARCHAR2(256) PATH ''Description'',
partno VARCHAR2(14) PATH ''Part/@Id'',
quantity BINARY_DOUBLE PATH ''Part/@Quantity'',
unitprice BINARY_DOUBLE PATH ''Part/@UnitPrice''');
END;
/

ALTER INDEX po_xmlindex_ix PARAMETERS('PARAM myparam');
7,
SELECT OBJECT_VALUE FROM purchaseorder
  WHERE XMLExists('/PurchaseOrder[SpecialInstructions="Expedite"]'
  PASSING OBJECT_VALUE);
3,
SELECT OBJECT_VALUE FROM purchaseorder
  WHERE XMLExists('/PurchaseOrder[SpecialInstructions="Expedite"]'
  PASSING OBJECT_VALUE);
4,
CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml FROM xwarehouses p;
7, dan
SELECT XMLQuery('for $i in /PurchaseOrder/LineItems/LineItem/Description
where $i[.contains text "Big" ftand "Street"] return {$i}'
PASSING OBJECT_VALUE RETURNING CONTENT)
FROM po_binxml
WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Description
  [. contains text "Big" ftand "Street"]'
4

SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
2 dan
SELECT po.reference, li.*
FROM po_binaryxml p,
XMLTable('/PurchaseOrder' PASSING p.OBJECT_VALUE
COLUMNS
reference VARCHAR2(30) PATH 'Reference',
lineitem XMLType PATH 'LineItems/LineItem') po,
XMLTable('/LineItem' PASSING po.lineitem
COLUMNS
itemno NUMBER(38) PATH '@ItemNumber',
description VARCHAR2(256) PATH 'Description',
partno VARCHAR2(14) PATH 'Part/@Id',
quantity NUMBER(12, 2) PATH 'Part/@Quantity',
unitprice NUMBER(8, 4) PATH 'Part/@UnitPrice') li;
3

Buat tabel dengan XML

SELECT OBJECT_VALUE FROM purchaseorder
  WHERE XMLExists('/PurchaseOrder[SpecialInstructions="Expedite"]'
  PASSING OBJECT_VALUE);
_9 atau
SELECT XMLCast(XMLQuery('/PurchaseOrder/Reference'
  PASSING OBJECT_VALUE
  RETURNING CONTENT) AS VARCHAR2(100)) "REFERENCE"
  FROM purchaseorder
  WHERE XMLExists('/PurchaseOrder[SpecialInstructions="Expedite"]'
  PASSING OBJECT_VALUE);
0

Tidak didukung

Masukkan data ke dalam kolom xml

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_5

Data XML dapat dimuat ke dalam tabel reguler dari S3. Untuk informasi lebih lanjut, lihat Memuat data ke dalam klaster DB Amazon Aurora MySQL dari file teks dalam bucket Amazon S3 di Panduan Pengguna untuk Aurora

Buat Indeks

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_6

Membutuhkan penambahan kolom yang dihitung dan bertahan yang selalu dihasilkan dengan ekspresi JSON dan mengindeksnya secara eksplisit. Pengoptimal hanya dapat menggunakan ekspresi JSON

Buat indeks teks lengkap

Setelah preferensi dan bagian dibuat di Oracle Text

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_7

T/A

Kueri menggunakan XQuery

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_8

T/A

Kueri menggunakan XPath

CREATE TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE);
_9

Karena tidak ada tipe data XML, doc menggunakan

SELECT XMLCast(XMLQuery('/PurchaseOrder/Reference'
  PASSING OBJECT_VALUE
  RETURNING CONTENT) AS VARCHAR2(100)) "REFERENCE"
  FROM purchaseorder
  WHERE XMLExists('/PurchaseOrder[SpecialInstructions="Expedite"]'
  PASSING OBJECT_VALUE);
1 untuk menyimpan konten XML [sumber] ---- pilih ExtractValue (doc,'//student//firstname') firstname from test;

Apakah XML didukung di MySQL?

Dukungan XML . ExtractValue dan UpdateXML Aurora MySQL supports two XML functions: ExtractValue and UpdateXML . ExtractValue menerima dokumen XML, atau fragmen, dan ekspresi XPATH. Fungsi mengembalikan data karakter anak atau elemen yang cocok dengan ekspresi XPATH.

Bisakah Anda mengimpor XML ke MySQL?

Untuk mengimpor data dari file XML ke dalam tabel MySQL, pilih tabel di Object Browser dan pilih Table -> Import -> Import XML Data Using Load Local. atau (Ctrl+Shift+X) . Tabel. Daftar semua tabel database aktif saat ini ditampilkan. Pilih Tabel dari kotak daftar.

Bisakah kita menyimpan XML dalam SQL?

Dalam SQL Server, Anda biasanya menyimpan data XML dalam kolom yang dikonfigurasi dengan tipe data xml . Tipe data mendukung beberapa metode yang memungkinkan Anda membuat kueri dan memodifikasi elemen individual, atribut, dan nilainya secara langsung di dalam instance XML, daripada harus bekerja dengan instance tersebut secara keseluruhan.

Bisakah Anda menyimpan XML dalam database?

Jumlah ruang yang ditempati dokumen XML dalam database DB2 ditentukan oleh ukuran awal dokumen dalam bentuk mentah dan sejumlah faktor lainnya. Meskipun Anda dapat menyimpan data string berseri XML dalam kolom bertipe biner atau karakter apa pun, kolom non-XML hanya boleh digunakan untuk pengarsipan data XML .