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 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.
Метод применим для использования с любыми СУБД поддерживающими хранимые процедуры.
Скрипт может быть написан на любом, подходящем вам, языке.
1309 Прочтений • [Написание PHP скрипта для построения отчета из Oracle (php oracle)] [08.05.2012] [Комментариев: 0]