Кодирование строк в XML из запроса Oracle - PullRequest
3 голосов
/ 28 октября 2009

Я создаю XML прямо из PL / SQL в Oracle.

Каков предпочтительный способ обеспечения соответствия выводимых строк XML-совместимости в отношении специальных символов и кодировки символов?

Большая часть XML-файла является статической, нам нужно выводить данные только для нескольких полей.

Пример того, что я считаю плохой практикой:

DECLARE @s AS NVARCHAR(100)
SELECT  @s = 'Test chars = (<>, æøåÆØÅ)'

SELECT  '<?xml version="1.0" encoding="UTF-8"?>'
      + '<root><foo>'
      + @s
      + '</foo></root>' AS XML

Ответы [ 3 ]

2 голосов
/ 29 октября 2009

Использование XmlElement, XmlAttribute, ... - лучший способ создания XML.
Следующая ссылка дает хорошее введение во все функции, которые есть:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#ADXDB1620

Если вы ищете еще несколько способов, посмотрите здесь
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#sthref1486

Вывод на кодирование. Если вы запустите программу pl / sql или выберите создание XML в сеансе клиента. XML кодируется с кодовой страницей клиента. Если вы запускаете его в фоновом режиме (используя dbms_job или dbms_scheduler), он кодируется с помощью кодовой страницы базы данных.

2 голосов
/ 28 октября 2009

Есть два хороших способа генерации XML, которые я нашел. Одним из них является пакет SYS.XMLDOM, который по сути является оберткой вокруг API Java DOM. Это несколько неуклюже, потому что pl / sql не обладает полиморфными возможностями Java, поэтому вам постоянно приходится явно «приводить» элементы к узлам и наоборот, чтобы использовать методы в пакете.

Самая классная, IMO, техника - использовать XMLElement и т. Д. SQL-функции, подобные этой:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE

    v_xml XMLTYPE;

BEGIN

    SELECT
        XMLElement( "dual",
            XMLAttributes( dual.dummy AS "dummy" )
        )
    INTO
        v_xml
    FROM
        dual;

    dbms_output.put_line( v_xml.getStringVal() );

END;
/

Если ваша структура XML не очень сложна и легко сопоставляется со структурой таблицы, это может быть очень удобно.

1 голос
/ 08 августа 2012
select dbms_xmlgen.getXML('select * from yourtable');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...