====== XMLDB ======
===== Storage =====
==== Character object storage (schemaless) ====
Create Table:
CREATE TABLE tableName
(
ID NUMBER(19),
document XMLType
)
XMLTYPE COLUMN DOCUMENT STORE AS CLOB
==== Character object storage based on schema ====
Register Schema:
declare
xmlschema CLOB := '
...
';
begin
DBMS_XMLSCHEMA.registerSchema(
SCHEMAURL => 'SCHEMANAME',
SCHEMADOC => xmlschema,
LOCAL => TRUE, -- local
GENTYPES => FALSE, -- generate object types
GENBEAN => FALSE, -- no java beans
GENTABLES => FALSE, -- generate object tables
FORCE => FALSE
);
end;
Create Table:
CREATE TABLE tableName
(
ID NUMBER(19),
document XMLType
)
XMLTYPE COLUMN DOCUMENT STORE AS CLOB
XMLSCHEMA SCHEMANAME ELEMENT "rootNodeName"
==== SQL Object storage based on schema ====
Register Schema:
declare
xmlschema CLOB := '
...
';
begin
DBMS_XMLSCHEMA.registerSchema(
SCHEMAURL => 'SCHEMANAME',
SCHEMADOC => xmlschema,
LOCAL => TRUE, -- local
GENTYPES => TRUE, -- generate object types
GENBEAN => FALSE, -- no java beans
GENTABLES => TRUE, -- generate object tables
FORCE => FALSE,
OPTIONS => DBMS_XMLSCHEMA.REGISTER_AUTO_OOL
);
end;
Create Table:
CREATE TABLE tableName
(
ID NUMBER(19),
document XMLType
)
XMLTYPE COLUMN DOCUMENT STORE AS OBJECT RELATIONAL
XMLSCHEMA SCHEMANAME ELEMENT "rootNodeName"
==== Binary XML storage (schemaless) ====
Create Table:
CREATE TABLE tableName
(
ID NUMBER(19),
document XMLType
)
XMLTYPE COLUMN "DOCUMENT" STORE as BINARY XML
==== Binary XML storage (any schema) ====
Register Schema:
declare
xmlschema CLOB := '
...
';
begin
DBMS_XMLSCHEMA.registerSchema(
SCHEMAURL => 'SCHEMANAME',
SCHEMADOC => xmlschema,
LOCAL => TRUE, -- local
GENTYPES => FALSE, -- generate object types
GENBEAN => FALSE, -- no java beans
GENTABLES => FALSE, -- generate object tables
FORCE => FALSE,
OPTIONS => DBMS_XMLSCHEMA.REGISTER_BINARYXML
);
end;
Create Table:
CREATE TABLE tableName
(
ID NUMBER(19),
document XMLType
)
XMLTYPE COLUMN "DOCUMENT" STORE as BINARY XML
ALLOW ANYSCHEMA
==== Binary XML storage based on schema ====
Register Schema:
declare
xmlschema CLOB := '
...
';
begin
DBMS_XMLSCHEMA.registerSchema(
SCHEMAURL => 'SCHEMANAME',
SCHEMADOC => xmlschema,
LOCAL => TRUE, -- local
GENTYPES => FALSE, -- generate object types
GENBEAN => FALSE, -- no java beans
GENTABLES => FALSE, -- generate object tables
FORCE => FALSE,
OPTIONS => DBMS_XMLSCHEMA.REGISTER_BINARYXML
);
end;
Create Table:
CREATE TABLE tableName
(
ID NUMBER(19),
document XMLType
)
XMLTYPE COLUMN "DOCUMENT" STORE as BINARY XML
XMLSCHEMA SCHEMANAME ELEMENT "rootNodeName"
===== Querying =====
==== XPath ====
SELECT
extractValue(
DOCUMENT
,
'./doc/ROOT/var[@name="PostalCode"]/subnode/value/text()'
)
FROM
tableName
WHERE
rownum < 1000
==== XMLQuery ====
SELECT XMLQuery(
'count(.//*)'
PASSING BY VALUE p.DOCUMENT
RETURNING CONTENT
)
FROM TABLE_NAME p
==== XMLTABLE ====
SELECT
tableName.ID
,
o.varname
,
p.pvalue
FROM
tableName
,
XMLTable(
'./doc/ROOT/var'
PASSING DOCUMENT
COLUMNS
varname varchar2(20) PATH '@name',
var XMLType PATH './subnode'
) as o
,
XMLTable('./subnode/value'
PASSING o.var
COLUMNS
pvalue varchar2(4) PATH './text()'
) as p
WHERE
o.varname = 'PostalCode'
and
p.pvalue < 1160
====== Indexing ======
===== Function based indexing =====
CREATE INDEX
indexName
ON
tableName
extractValue(
DOCUMENT
,
'./doc/ROOT/var[@name="PostalCode"]/subnode/value/text()'
);
===== XMLIndex =====
CREATE INDEX
po_xmlindex_ix
ON
po_clob (OBJECT_VALUE)
INDEXTYPE IS XDB.XMLINDEX
PARAMETERS (
'PATHS (INCLUDE (
/PurchaseOrder/LineItems//*
/PurchaseOrder/Reference
))'
);