|
|
|||
|
wm-help.net -> Электронная библиотека -> Базы данных -> Использование технологий WWW для доступа к базам данных -> Использование языка PerlИспользование языка Perl
Глава 6. Использование языка PerlСодержание6.1Основные
особенности Perl 6.2Взаимодействие
с СУБД 6.4Обработка файлов формата DBF 6.1 Основные особенности Perl6.1.1 ВведениеPerl - интерпретируемый
язык, приспособленный для
обработки произвольных текстовых
файлов, извлечения из них
необходимой информации и выдачи
сообщений. Perl также удобен для
написания различных системных
программ. Этот язык прост в
использовании, эффективен, но про
него трудно сказать, что он
элегантен и компактен. Perl сочитает
в себе лучшие черты C, shell, sed
и awk, поэтому для тех, кто
знаком с ними, изучение Perl-а не
представит особого труда. Cинтаксис
выражений Perl-а близок к синтаксису C.
В отличие от большинства утилит ОС UNIX
Perl не ставит ограничений на объем
обрабатываемых данных и если
хватает ресурсов, то весь файл
обрабатывается как одна строка.
Рекурсия может быть произвольной
глубины. Хотя Perl приспособлен для
обработки текстовых файлов, он
может обрабатывать так же двоичные
данные и создавать .dbm файлы,
подобные ассоциативным массивам.
Perl позволяет использовать
регулярные выражения, создавать
объекты, вставлять в программу на С
или C++ куски кода на Perl-е, а также
позволяет осуществлять доступ к
базам данных, в том числе Oracle. 6.2 Взаимодействие с СУБДPerl позволяет осуществлять доступ
к различным СУБД. Здесь будет
освещен вопрос доступа к СУБД 6.2.1 Взаимодействие с Oracle6.2.1.1 Основные функции доступаМы приведем здесь пример программы, которая создает таблицу, помещает в нее некоторые данные и потом производит выборку строк из этой таблицы. #!/usr/local/bin/perl use Oraperl; # подключаем модуль Oraperl $system_id = 'T:bdhost.com:Base'; $lda = &ora_login($system_id,'scott','tiger'); # вход в систему $st = 'create table EMP (name varchar2(100), organization varchar2(100))'; $csr = &ora_open($lda,$st) || die $ora_errstr; &ora_close($csr); # создание таблицы в базе данных $st = 'insert into EMP values (\'John Smit\', \'NATO\')'; $csr = &ora_open($lda, $st); &ora_close($csr); # помещение строки в таблицу В результате в базе создалась
таблица из двух столбцов с одной
записью:
$st = 'select name from EMP where organization = \'NATO\''; $csr = &ora_open($lda,$st); # выбираем из таблицы значения столбца name, # которым сответствует значение столбца organization # равное 'NATO' @result = &ora_fetch($csr); # помещаем эти значения в массив @result &ora_close($csr); print @result; &ora_logoff($lda); # выход из системы Для взаимодействия с $lda = &ora_login($system_id,$username,$password) Для того, чтобы получить доступ к
информации, хранимой в $csr = &ora_open($lda, $statement [,$cache]) Для определения SQL-запроса в базу
данных программа должна вызывать
функцию $csr = &ora_open($lda,'select ename, sal from emp order by ename',10); Эта функция эквивалентна функции
OCI &ora_bind($csr, $var, ...) Если SQL выражение содержит
обращение к переменным языка Perl,
то необходимо подставить вместо
имен значения переменных. Для этого
используется функция $csr = &ora_open($lda, 'insert into emp values (:1,:2)'); &ora_bind($csr,$ename,$sal); - подставляет в SQL выражение
вместо :1 и :2 значения
переменных $nfields = &ora_fetch($csr[, trunc]); @array = &ora_fetch($csr); Эта функция используется с
оператором SQL SELECT для извлечения
информации из базы данных и имеет
только один обязательный параметр -
идентификатор курсора, полученный
в результате вызова функции &ora_close($csr) Если открытый курсор не будет
больше использоваться, то его нужно
закрыть вызовом функции &ora_do($lda,$statement) Не все SQL-выражения возвращают
данные или содержат переменные для
подстановки. В таких случаях
функция &ora_do($lda,'drop table employee'); это эквивалентно: &ora_close(&ora_open($lda, 'drop table employee'));
&ora_logoff($lda) Для выхода из системы
используется функция 6.2.1.2 Дополнительные функцииДополнительные возможности
предоставляются функциями @titles = &ora_titles($csr) Программа может определить
название полей, содержимое которых
будет извлечено запросом, вызовом
функции @length = &ora_length($csr) Программа может определить длину
каждого из полей, возвращенных
запросом, с помощью вызова функции @types = &ora_types($csr) Программа может определить тип
каждого из полей, возвращенных
запросом, с помощью вызова функции &ora_autocommit($lda,$on_or_off) Режим автоматического завершения
транзакций можно установить или
отменить вызовом функции &ora_commit($lda) &ora_rollback($lda) Изменения в базе данных могут
быть сохранены или отменены
вызовом этих функций. Они имеют
один параметр - идентификатор
регистрации в системе. Транзакции,
результат которых уже был сохранен
не могут быть отменены &ora_version() Эта функция печатает версию и
информацию об авторских правах,
касающуюся 6.2.1.3 ПеременныеВ модуле Oraperl.pm есть шесть
специальных переменных: 6.2.1.4 Переменные для подстановки
$csr = &ora_open($lda,"insert into tel values(:1,:2)"); Эти два имени :1 и :2
называются переменными для
подстановки. Функция &ora_bind($csr, "Annette","3-222-2-22-22-22"); &ora_bind($csr,$name,$telephone); Номера переменных должны
следовать в порядке возрастания
начиная с 1, так как 6.3 Написание модулей CGIЯзык Perl очень широко используется
при написании исполняемых модулей
CGI (Common Gateway Interface) для Web. Это
обусловлено прежде всего тем, что
Perl предоставляет разработчикам
простые и удобные средства
обработки текста и взаимодействия
с базами данных. Наша цель - лишь
дать пример использования Perl для
написания CGI-модуля. Рассмотрим
простую подпрограмму разбора
входного потока CGI-программы (при
передаче параметров используется
метод #!/usr/local/bin/perl
sub Print {
$len = 100;
$buf = "";
read(STDIN, $buf,$len);
# считываем из стандартного потока ввода
# в переменную $buf количество символов
# $len
@ar = split(/[&=]/,$buf);
# разбиваем строку в массив строк,
# разделителями служат & и =.
$output = "Content-type: text/html\n\n
# посылает тип MIME передаваемого документа
<HTML><HEAD><TITLE>Result</TITLE></HEAD>
<BODY BGCOLOR=\"#FFAAAA\">
<H1>Hi there</H1><HR><BR>";
$i = 0;
while ($i <= $#ar) {
$ar[$i] =~ s/\+/ /g;
# заменяем в элементах массива + на пробел
$output .= "$ar[$i]\n";
# конкатенация переменной $output с
# элементом массива
$i++; }
$output .="<HR></BODY></HTML>";
# завершаем HTML страницу
print $output;
}
eval &Print;
# выполняем подпрограмму осуществляющую
# считывание, обработку и вывод информации
В данном примере был
проиллюстрирован случай
считывания параметров из входного
потока. Если параметры передаются
CGI-модулю в командной строке, то они
помещаются в служебный массив 6.4 Обработка файлов формата DBFДля взаимодействия с файлами
этого формата существует
специальный модуль - Новый $database = new Xbase; Будет создан объект $database->open_dbf($dbf_name,$idx_name); Мы ассоциировали DBF-файл и необязательный индексный файл с объектом. Чтобы определить тип (database type) можно сделать следующее: print $database->dbf_type; Вернется строка, которая, если print $database->last_update; Возвращает строку с датой. $end=$database->lastrec; Вернется номер последней записи в
файле с базой данных. $database->dbf_stat; В стандартный выходной поток
будет напечатана информация о
статусе и структуре базы данных.
Этот метод работает аналогично
команде $database->idx_stat; Печатает в стандартный выходной
поток (STDOUT) информацию о статусе
открытого IDX-файла. $database->go_top; Передвигает курсор чтения на
физическое начало файла,если
индексы не существуют и на первую
запись, соответствующую порядку,
который задается индексом, в
противоположном случае. $database->go_bottom; Передвигает курсор чтения на
физический конец файла,если
индексы не существуют и на
последнюю запись, соответствующую
порядку, который задается индексом,
в противоположном случае. $database->go_next; Эквивалентно команде $database->go_prev; Эквивалентно команде $stat=$database->seek($keyvalue); Эта команда устанавливает курсор
на первую запись, соответствующую
данному ключу. Но в данном случае
база данных должна быть открыта с
соответствующим индексом, в
противоположном случае будет
выдано сообщение об ошибке и
исполнение прекратиться.
Возвращается значение, содержащее
информацию о том, был ключ найден
или нет. $current_rec=$database->recno; Метод if ($database->bof) {
print " At the very top of the file \n";
}
Аналогично действует метод if ($database->eof) {
print " At the very end of the file \n";
}
Чтобы прочитать содержимое какого-либо поля записи можно поступить так: print $database->get_field("NAME");
Возвращает строку с содержимым
поля. Если данная запись помечена
для удаления, то использует
псевдоимя поля @fields = $database->get_record; В массиве они будут располагаться
в такой же последовательности, как
и в базе данных. $database->close_dbf; Закрывает файл с базой данных, индексами и комментариями. В завершение приведем небольшой пример программы, которая распечатывает статус базы данных и индексного файла, а также дату последнего обновления и количество записей в базе данных. #!/usr/bin/perl use Xbase; # подключение модуля $database = new Xbase; # создание объекта $d = "/home/smit/employee.dbf"; # имя файла с базой $i = "/home/smit/employee.cdx"; # имя индексного файла $database->open_dbf($d,$i); # открываем базу данных $database->dbf_stat; # печатаем статус и структуру # базы данных $database->idx_stat; # печатаем статус и структуру # индексов @fields = $database->get_record; print @fields,"\n"; # печатаем содержимое текущей записи print $database->last_update, "\n"; # печатаем дату последнего обновления $end = $database->lastrec; print $end; #печатаем номер последней записи Полная спецификация языка Perl приводиться в Приложении 2 к отчету. [Назад] [Содержание] [Вперед] |
|||||||
|
| бодибилдинг | Строим Домик | RU-домены за 170 рублей | Copyright © "В помощь Веб-Мастеру" (Alexander D. Belyaev) 2005-2008. При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны! Время генерации страницы: 0.057 |