Образец XML-схемы - во вложении (это некий медицинский стандарт).
Она прекрасно обрабатывается дотнетовскими кодогенераторами (xsd.exe) и без проблем регистрируется в SQL Server-e для колонки таблицы, со всеми валидациями и т.п.
В Oracle всё падает в версиях от 10g до 12с:
begin
DBMS_XMLSCHEMA.registerSchema(
schemaurl => 'http://schemas.openehr.org/v1',
schemadoc => bfilename('OPENEHR', 'OpenEHR.xsd'),
local => true,
gentables => true,
gentypes => true,
csid => NLS_CHARSET_ID('AL32UTF8'));
end;
Сообщение об ошибке:
ORA-31084: error while creating table "OPENEHR"."composition3153_TAB" for element "composition"
ORA-01792: maximum number of columns in a table or view is 1000
ORA-02310: exceeded maximum number of allowable columns in table
ORA-06512: at "XDB.DBMS_XMLSCHEMA_INT", line 37
ORA-06512: at "XDB.DBMS_XMLSCHEMA", line 61
ORA-06512: at "XDB.DBMS_XMLSCHEMA", line 126
ORA-06512: at line 2
Нашел рекомендацию замены в схеме всех xs:sequence на xs:choice. Не помогло.
Потом отказался от генерации таблиц и типов:
begin
DBMS_XMLSCHEMA.registerSchema(
schemaurl => 'http://schemas.openehr.org/v1',
schemadoc => bfilename('OPENEHR', 'OpenEHR.xsd'),
local => true,
gentables => false,
gentypes => true,
csid => NLS_CHARSET_ID('AL32UTF8'));
end;
Схема зарегистрировалась. Создал таблицу с типизированной колонкой XMLType:
create table ATEST
(
ID number(17),
DATA XMLType
)
XMLType DATA store as object relational
xmlschema "http://schemas.openehr.org/v1" element "archetype"
Делаю попытку вставки записи (XML заведомо валидный и соответствует схеме, проверено в Visual Studio):
insert into ATEST
(
ID, DATA
)
values
(
1,
XMLType(bfilename('OPENEHR', 'openEHR-EHR-OBSERVATION.blood_pressure.v1.xml '), NLS_CHARSET_ID('CL8MSWIN1251'))
);
Получаю сообщение:
ORA-31079: unable to resolve reference to type "string"
Собственно, прошу помощи зала.