Базы данных Oracle - статьи



             

Решение


В принципе, у вас есть уже всё, что необходимо для реализации задуманного. И написать подобную утилиту вы наверняка сможете сами. И возможно даже лучше чем то, что предложено ниже.

Собственно решением является plsql пакет fp_exp с единственной public процедурой to_excel, которая вызывается без всяких параметров, например, в пункте меню "Экспорт в Excel": BEGIN fp_exp.to_excel; END;

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

Утилита изначально разрабатывалась для использования с Forms Server, работающим под Linux. Затем была перенесена в среду Oracle Applications (та же архитектура, но под SUN Solaris). Поэтому приводится вариант пакета для web реализации. Для работы в клиент-сервер, тело процедуры to_excel нужно лишь чуть-чуть подправить, что не должно вызвать у вас затруднений. PACKAGE fp_exp /* -- fp_exp 15-JUL-2003 by pal (Pavel Luzanovv) -- НАЗНАЧЕНИЕ -- Экспорт данных текущего блока в MS Excell -- МОДИФИКАЦИЯ -- 15-JUL-2003 pal Создание */ IS -- На что заменять символ табуляции в
значении элемента формы chr9subst_pc CONSTANT VARCHAR2(3) := ' ';

-- На что заменять символ перевода строки
в значении элемента формы chr10subst_pc CONSTANT VARCHAR2(1) := ' ';

-- В каком формате выводить элементы типа даты date_format_pc CONSTANT VARCHAR2(8) := 'DD.MM.YY';

-- каталог на сервере приложения, где
будут создаваться файлы экспорта tempdir_pc CONSTANT VARCHAR2(255) := '/oraapp/tempdata/';

-- относительный путь до cgi-скрипта,
для использования -- в WEB.SHOW_DOCUMENT cgi_script_pc CONSTANT VARCHAR2(255) :=
'/cgi-bin/exp2xls';

PROCEDURE to_excel; END fp_exp;

PACKAGE BODY fp_exp IS TYPE item_rectype IS RECORD ( name VARCHAR2(30), prompt VARCHAR2(255), datatype VARCHAR2(255) ); TYPE item_tabtype IS TABLE OF item_rectype
INDEX BY BINARY_INTEGER; item_tab item_tabtype;

/* --------- LOCAL MODULES --------- */ PROCEDURE show_progress (message_in IN VARCHAR2) IS BEGIN MESSAGE(message_in, NO_ACKNOWLEDGE); SYNCHRONIZE; END show_progress;




Содержание  Назад  Вперед