Базы данных Oracle - статьи



              

Использование для дополнительной типизации XMLTYPE в производных таблицах (views)


При отсутствии XML DB не заперщено создавать производную таблицу (view), выдающую данные в виде таблицы документов XML (типа XMLTYPE) на основе данных из обычных таблиц. Рассмотрим, как при наличии XML DB можно дополнительно уточнить такую производную таблицу схемой XML.

В этом примере регистрируется схема, не взятая из ресурса репозитария, как ранее, а явно выписанная в виде текста XML:

BEGIN DBMS_XMLSCHEMA.REGISTERSCHEMA ( schemaurl => 'http://localhost:8080/public/employee.xsd'

, schemadoc => '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="employee"> <xs:complexType> <xs:sequence> <xs:element name="ename" type="xs:string"/> <xs:element name="job" type="xs:string"/> <xs:element name="sal" type="xs:integer"/> </xs:sequence> <xs:attribute name="empno" type="xs:integer"/> </xs:complexType> </xs:element> </xs:schema> ' ); END; /

Пример создания производной таблицы:

CREATE OR REPLACE VIEW empxml_schema_view OF XMLTYPE XMLSCHEMA "http://localhost:8080/public/employee.xsd" ELEMENT "employee" WITH OBJECT ID ( EXTRACT ( SYS_NC_ROWINFO$, '/employee/@empno' ).GETNUMBERVAL ( ) ) AS SELECT XMLELEMENT ( "employee" , XMLATTRIBUTES ( e.empno AS "empno" ) , XMLFOREST ( e.ename AS "ename", e.job AS "job", e.sal AS "sal" ) ) FROM emp e ;

Наличие данных, противоречащих схеме, не препятствует извлечению данных результата при обращении к созданой производной таблице. Однако ж имеется метод, способный выполнить проверку соответствия схеме:

SELECT VALUE ( v ).ISSCHEMAVALID ( ) FROM empxml_schema_view v;

Упражнение. Создать производную таблицу EMLXML_VIEW по аналогии с EMLXML_SCHEMA_VIEW, не уточненной схемой (для этого потребуется удалить из определения выше две строки, выделенные жирным шрифтом). Выполнить следующие проверки:




Содержание  Назад  Вперед