Страница 3 из 9 Регистрация XML схемы Регистрация XML схемы определяется отображением XML-to-SQL и иерархической объектно-реляционной структурой для сохранения XML документов в базе данных Oracle. Мы посмотрим, как это жделается, используя созданных в 8-й главе пользователя по имени DEMO и папку WebDAV. Первое, вам нужно скопировать XML схему для записей о клиентах, contact_simple.xsd, в папку /public WebDAV. Далее содержание этой схемы: <xsd:schema xmlns:xsd="https://www.w3.org/2001/XMLSchema"> <xsd:element name="Customer" type="CustomerType"/> <xsd:complexType name="CustomerType"> <xsd:sequence> <xsd:element name="NAME" type="xsd:string"/> <xsd:element name="EMAIL" type="xsd:string"/> <xsd:element name="ADDRESS" type="xsd:string"/> <xsd:element name="PHONE" type="phoneType"/> <xsd:element name="DESCRIPTION" type="contentType"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="ContentType" mixed="true"> <xsd:sequence> <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="phoneType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\(\d{3}\)\d{3}-\d{4}"/> </xsd:restriction> </xsd:simpleType> </xsd:schema>
Для регистрации этой XML схемы в XML DB можно применить следующую PL/SQL процедуру: ALTER SESSION SET EVENTS='31098 trace name context forever'; BEGIN DBMS_XMLSCHEMA.registerURI( 'https://localhost:8080/public/contact_simple.xsd', '/public/contact_simple.xsd', LOCAL=>TRUE, GENTYPES=>TRUE, GENBEAN=>FALSE, GENTABLES=>TRUE); END;
ЗАМЕЧАНИЕ Для использования команды ALTER SESSION вам нужно зарегистрироваться как SYS и предоставлять привилегии ALTER SESSION пользователю DEMO, используя команду “GRANT ALTER SESSION TO DEMO”. Иначе вы получите сообщение об ошибке ORA-01031: Insufficient Privileges (Недостаточнопривилегий). В функции DBMS_XMLSCHEMA.registerURI() первый параметр - это схема URI, https://localhost:8080/public/contact_simple.xsd, которая уникально идентифицирует зарегистрированную XML схему в XML DB. Второй параметр - это XML DB URI (XDBUri), /public/contact_simple.xsd, обращающиеся к файлу contact_simple.xsd в папке /public репозитория XML DB. Следующие параметры определяют регистрируемую схему: локальная - (LOCAL=>TRUE) или глобальная (LOCAL=>GLOBAL), а также что будет создано: объектные типы - (GENTYPES=>TRUE) и таблицы по умолчанию (default) (GENTABLES=>TRUE). Параметр GENBEAN не обязателен и в данное время не выполняет никакой функции. Если XML схема зарегистрирована как глобальная в XML DB, то она может быть совместно используемой различными пользователями базы данных. Иначе совместное использование XML схемы не разрешается. Можно установить GENTABLES=>FALSE, если не надо, чтобы перед регистрацией XML схемы Oracle XML DB создавал default таблицы. В таком случае можно создать XMLType таблицы, используя ключевое слово XMLSCHEMA, как показано ниже: CREATE TABLE customer_xmltype_tbl OF XMLTYPE XMLSCHEMA "https://localhost:8080/public/contact_simple.xsd" ELEMENT "Customer";
Кроме того, можно использовать следующий синтаксис для определения столбцов XMLType, хранящихся при использовани XML Schema: CREATE TABLE customer_col_tbl( id NUMBER, record XMLType) XMLTYPE COLUMN record STORE AS OBJECT RELATIONAL XMLSCHEMA "https://localhost:8080/public/contact_simple.xsd" ELEMENT "Customer";
Коль скоро для хранения XMLType столбцов и таблиц применяются одни и те же приемы, в последующих секциях мы будем детально рассматривать только XMLType таблицы на XML Schema. В процессе регистрации XML схемы можно использовать следующую команду для создания трассировочного файла в [директории, определяемой параметром инициализации USER_DUMP_DIR], в котором отразятся DLL, используемые для создания объектных таблиц и типов данных: ALTER SESSION SET EVENTS='31098' TRACE NAME CONTEXT FOREVER; Для размещения трассировочного файла необходимо проверить ID идентификатор текущей сессии, обратившись к представлениям V$SESSION и V$PROCESS. Перед запросом к V$SESSION и V$PROCESS от имени пользователя DEMO, вам необходимо войти как SYS и дать пользователю DEMO привилегию SELECT из представлений V$SESSION и V$PROCESS, как показано далее: GRANT SELECT ON V_$SESSION TO DEMO; GRANT SELECT ON V_$PROCESS TO DEMO;
ЗАМЕЧАНИЕ Коль скоро V$SESSION и V$PROCESS - это просто синонимы представлений, то никаких других привилегий на них дать нельзя. Применив следующую SQL команду можно найти идентификатор сессии, которая соответствует трассировочному файлу: SELECT a.spid FROM V$PROCESS a, V$SESSION b WHERE a.addr=b.paddr AND b.audsid=userenv('sessionid');
Возвращаемое значение: SPID ------------ 2796
У трассировочного файла есть имя, структурированное как orclX_ora_<Session_id>.trc и можно узнать [значение параметра] USER_DUPM_DIR, выполнив следующую команду от лица SYS: SQL> SHOW PARAMETERS user_dump_dest NAME TYPE VALUE ----------------------------------------------------------- user_dump_dest string D:\ORACLE\ADMIN\ORCLX\UDUMP
И далее, наличие трассировочного файла orclX_ora_<Session_id>.trc в USER_DUPM_DIR можно проверить следующей командой: SQL> host ls d:\oracle\admin\orclX\udump\orclX_ora_2796.trc orclX_ora_2796.trc Так как этот файл содержит список DDL, используемых для создания объектных таблиц или типов данных, это нужная справка при отладке регистрации XML схемы. |