Спрятать колонку

Oracle + HTML + XML + XSLT

предположим, перед нами стоит задача формирования html отчета. в дальнейшем его можно слить в файл или отослать кому-то мыло.
на мой взгляд есть два способа решения это задачи.

1. PL/SQL

это наиболее простой, быстрый и негибкий вариант. примером его реализации может служить следующая конструкция

DECLARE
   C_HTML CLOB := '';
   V_ROW VARCHAR2(4000) := '';
BEGIN
  FOR DS IN (SELECT * FROM TABLE) LOOP
    V_ROW := '<TD>' || DS.COL1 || '</TD><TD>' || DS.COL2 || '</TD>';
    C_HTML := C_HTML || '<TR>' || V_ROW || '</TR>';
  END LOOP;
  C_HTML := '<HTML><HEAD></HEAD></BODY>' || C_HTML || '</BODY></HTML>'
END;

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

2. XML + XLST

первая часть это непосредственно инициализация переменных, получение контекста и создание XML данных, основанных на нашем запросе.

DECLARE
    V_SQL                 VARCHAR2(4000);
    X_CONTEXT         DBMS_XMLGEN.CTXHANDLE := 0;
    X_XML_DATA       XMLType;
   X_HTML_OUTPUT  XMLType
   XSLT                    LONG;
BEGIN
   V_SQL := 'SELECT * FROM TABLE';
   X_CONTEXT := DBMS_XMLGEN.NEWCONTEXT(V_SQL);
   X_XML_DATA := DBMS_XMLGEN.GETXMLTYPE(X_CONTEXT, DBMS_XMLGEN.NONE);
 
END;

теперь в дело вступает XLST.
по-простому говоря, XSLT это набор правил (спецификация) для преобразований XML документов. все что остается нам лишь определить как наши данные из XML формата перетекут в HTML.

>> Читать далее
RSS-материал

Наверх