The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Написание PHP скрипта для построения отчета из Oracle (php oracle)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: php, oracle,  (найти похожие документы)
From: Довганюк Сергей <dovganuk_sergey@mail.ru.> Newsgroups: email Date: Mon, 25 Sep 2005 18:21:07 +0000 (UTC) Subject: Написание PHP скрипта для построения отчета из Oracle Как просто построить сложный отчет или Oracle, Excel, PHP и все, все, все. Несколько лет назад, вначале становления нашей информационной среды на основе СУБД Oracle, для отображения результатов отчета в Excel использовалось простое внедрение SQL запроса на лист Excel. Отчеты в виде простой таблицы были легко реализуемы, но подход имел существенный недостаток - сложный отчет (много подитогов, сложное форматирование) было очень тяжело реализовывать. Приходилось писать код на VB. Сложность отчетов росла и нам пришлось искать другой подход для отображения отчетов в Excel. В итоге появилось следующее решение: 1) Макет отчета строится в Excel. При этом определяется его форматирование, расположение на листе при печати и т.д. 2) Макет сохраняется в виде html файла (файл -> сохранить как Web страницу). Как правило, сохраняется только текущая страница, что должно быть указано в диалоге сохранения. Не всегда Excel воспроизводит первоначальное форматирование документа (границы ячеек и т.д.) верно при повторном открытии, впрочем, как и броузеры. Перед сохранением советую предварительно просмотреть макет отчета в броузере (файл -> предварительный просмотр Web страницы). 3) Далее нам нужно встроить код подучившейся html страницы в хранимую процедуру которая отвечает за формирование отчета. Это будет иметь примерно следующий вид (Oracle 8i): CREATE OR REPLACE FUNCTION print_kniga (iKniga integer) RETURN html_string IS ... R html_string := html_string(); ... BEGIN ... R.extend; R(R.count) := '<html xmlns:o="urn:schemas-microsoft-com:office:office"'; R.extend; R(R.count) := 'xmlns:x="urn:schemas-microsoft-com:office:excel"'; R.extend; R(R.count) := 'xmlns="http://www.w3.org/TR/REC-html40">'; R.extend; R(R.count) := '<head>'; R.extend; R(R.count) := '<meta http-equiv=Content-Type content="text/html; charset=windows-1251">'; R.extend; R(R.count) := '<link rel=Original-File href="file:///C:/Мои%20документы/...">'; R.extend; R(R.count) := '<meta name=ProgId content=Excel.Sheet>'; ... return R; END; где html_string тип вида CREATE OR REPLACE TYPE html_string AS TABLE OF VARCHAR(1000) В случае с Oracle для быстрого дополнения html кода конструкциями языка PL/SQL код html копировался в документ Word и производились замены: а) заменялся символ ' на '' б) заменялся символ ^p (знак абзаца) на последовательность ';^pR.extend;R(R.count) := ' в) первая строка html кода менялась вручную. 4) Для связки вывода хранимой процедуры с броузером или Excel использовался Apache с PHP (5). На PHP был написан небольшой скрипт (oracle.php) для придания результату работы хранимой процедуры вида настоящей html страницы. <? if ($_GET["xls"] == 1) { header("Content-type: application/vnd.ms-excel"); } $conn = OCILogon($_GET["l"], $_GET["p"]); $sql = "select * from table(cast(" . stripslashes($_GET["f"]) . " as html_string))"; if ($_GET["debug"] == 1) { echo $sql; } $stmt = OCIParse($conn, $sql); OCIExecute($stmt, OCI_DEFAULT); While (OCIFetch($stmt)) { echo OCIResult($stmt, 1) . "\n"; } ?> Принцип работы скрипта прост. URL имеет два вида а) для броузера http://www/oracle.php?l=login&p=password&f=stored_procedure_name(stored procedure params) б) для Excel http://www/oracle.php?xls=1&l=login&p=password&f= stored_procedure_name(stored procedure params) 5) Далее все просто, можно или просмотреть отчет в броузере или внедрить его в лист Excel. Метод применим для использования с любыми СУБД поддерживающими хранимые процедуры. Скрипт может быть написан на любом, подходящем вам, языке.

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру