FUNCTION GETUNIQUEID_2 RETURN VARCHAR2
AS
v_curr_id NUMBER;
v_inc NUMBER;
v_next_val NUMBER;
pragma autonomous_transaction;
begin
CREATE SEQUENCE sequnce
START WITH YYMMDD0000000001
INCREMENT BY 1
NOCACHE
select sequence.nextval into v_curr_id from dual;
if(substr(v_curr_id,0,6)= to_char(sysdate,'yymmdd')) then
v_next_val := to_number(to_char(SYSDATE+1, 'yymmdd') || '0000000000');
v_inc := v_next_val - v_curr_id;
execute immediate ' alter sequence sequence increment by ' || v_inc ;
select sequence.nextval into v_curr_id from dual;
execute immediate ' alter sequence sequence increment by 1';
else
dbms_output.put_line('exception : file not found');
end if;
RETURN 'ID'||v_curr_id;
END;
Есть несколько "стандартных" способов делать то, что вы хотите, а именно XLink и XInclude (в зависимости от того, что вы хотите сделать), хотя вам нужно сделать убедитесь, что у вас есть процессор, который может использовать внешние ссылки. В большинстве XML-библиотек эта функция не включена.
Тогда вы сможете сделать что-нибудь вроде :
<group>
<personlink xlink:href="person.xml" xlink:show="embed" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</group>
Однако вам, вероятно, это действительно не нужно. Если вам требуется подмножество информации из большого документа, вы можете легко использовать XSLT или XQuery, чтобы вырезать нужные части. Вы можете использовать этот подход вместе с синтаксическим анализом SAX, который основан на событиях и не хранит весь документ в памяти, чтобы масштабировать ваше приложение для обработки довольно больших документов.
Даже при использовании DOM я этого не делал.
Гм, для файлов xml нет ограничений по размеру. не стоит беспокоиться об очень больших размерах. Но помните; Xml - это формат обмена данными, а не формат базы данных. Вы используете xml для обмена данными между различными приложениями / службами.
Здесь - спецификация XML для DTD, в которой вы можете объявлять ссылки на сущности.
Простой документ, например:
<!DOCTYPE test [
<!ENTITY ref SYSTEM "file:///C:/test.txt" >
]>
<test>
&ref;
</test>
И файл: /// C: / test .txt:
<blah>
Fee
Fi
Fo
Fum
</blah>
расширит исходный документ до:
<test>
<blah>
Fee
Fi
Fo
Fum
</blah>
</test>
Я считаю, что непроверяющие XML-синтаксические анализаторы не обязаны расширять ссылки, поэтому будьте осторожны.
Кроме того, не забудьте указать standalone = "no" в XMLDecl. (Отсутствие атрибута standalone предполагает, что он равен "нет", но все же лучше поместить его туда ...)
Не существует стандарта (будет работать во всех парсерах) для импорта таких узлов. Но вы можете сэкономить место, изменив некоторые из ваших элементов на атрибуты
<group>
<person name='John' age='18' hair='Brown' eyes='Blue' />
<person name='Kim' age='21' hair='Blue' eyes='Green' />
<person name='Sean' age='22' hair='Black' eyes='Brown' />
</group>
XInclude - единственный стандарт с любым уровнем поддержки.
В статье Википедии о XInclude есть несколько хороших примеров использования. .
XLink - это косвенно связанный стандарт, на самом деле не для включения документов, а в большей степени для цитирования частей в других документах. Он не очень хорошо поддерживается.
Если вас беспокоит размер, есть несколько способов: )