XMLTYPE дает возможность сообщить БД, что заносимый текст – это не просто строка, а строка документа XML. Следующая попытка приведет к ошибке:
INSERT INTO books VALUES (101, XMLTYPE('<cover><title></title>'));
С дугой стороны, Oracle поймет правильно составленные директивы XML и встроенное в текст описание DTD:
INSERT INTO books VALUES
(101
, XMLTYPE('<?xml version="1.0"?>
<!DOCTYPE cover [
<!ELEMENT cover (title, author*, pages)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT pages (#PCDATA)>
]>
<cover>
<title>SQL*Plus Pocket Reference</title>
<author>Jonathan Gennick</author>
<pages>94</pages>
</cover>'));
Убедитесь в этом сами, что Oracle действительно соотносит описание DTD самому тексту документа !
Для выборки можно использовать специально придуманные для XMLTYPE функции. Так, функция EXTRACTVALUE извлекает значения элемента из документа XML:
SELECT id, EXTRACTVALUE(description, '/cover/title')
FROM books;
Функция EXISTSNODE дает возможность использовать в SQL условие отбора XPath (язык отбора, принятый в технологиях XML):
SELECT id, b.description.XMLDATA
FROM books b
WHERE b.description.EXISTSNODE('/cover[author="Sanjay Mishra"]')=1;