Главная Рефераты по рекламе Рефераты по физике Рефераты по философии Рефераты по финансам Рефераты по химии Рефераты по хозяйственному праву Рефераты по цифровым устройствам Рефераты по экологическому праву Рефераты по экономико-математическому моделированию Рефераты по экономической географии Рефераты по экономической теории Рефераты по этике Рефераты по юриспруденции Рефераты по языковедению Рефераты по юридическим наукам Рефераты по истории Рефераты по компьютерным наукам Рефераты по медицинским наукам Рефераты по финансовым наукам Рефераты по управленческим наукам Психология и педагогика Промышленность производство Биология и химия Языкознание филология Издательское дело и полиграфия Рефераты по краеведению и этнографии Рефераты по религии и мифологии Рефераты по медицине Рефераты по сексологии Рефераты по информатике программированию Краткое содержание произведений |
Реферат: Использование языка PerlРеферат: Использование языка PerlСодержание 6.1Основные особенности Perl 6.2Взаимодействие с СУБД 6.3Написание модулей CGI 6.4Обработка файлов формата DBF 6.1 Основные особенности Perl 6.1.1 Введение Perl - интерпретируемый язык, приспособленный для обработки произвольных
текстовых файлов, извлечения из них необходимой информации и выдачи сообщений.
Perl также удобен для написания различных системных программ. Этот язык прост в
использовании, эффективен, но про него трудно сказать, что он элегантен и
компактен. Perl сочитает в себе лучшие черты C,
shell, sed и awk, поэтому для тех,
кто знаком с ними, изучение Perl-а не представит особого труда. Cинтаксис
выражений Perl-а близок к синтаксису C.
В отличие от большинства утилит ОС UNIX
Perl не ставит ограничений на объем обрабатываемых данных и если хватает ресурсов,
то весь файл обрабатывается как одна строка. Рекурсия может быть произвольной
глубины. Хотя Perl приспособлен для обработки текстовых файлов, он может
обрабатывать так же двоичные данные и создавать .dbm файлы, подобные
ассоциативным массивам. Perl позволяет использовать регулярные выражения,
создавать объекты, вставлять в программу на С или C++ куски кода на Perl-е, а
также позволяет осуществлять доступ к базам данных, в том числе Oracle. 6.2 Взаимодействие с СУБДPerl позволяет осуществлять доступ к различным СУБД. Здесь будет освещен вопрос доступа к СУБД Oracle. 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); # выход из системы Для взаимодействия с Oracle
в Perl есть специальный модуль Oraperl.pm.
Основными функциями для доступа к базе данных являются: $lda = &ora_login($system_id,$username,$password) Для того, чтобы получить доступ к информации, хранимой в Oracle необходимо
сначала войти в систему. Это осуществляется вызовом функции &ora_login().
Эта функция имеет три параметра: системный идентификатор базы данных, имя
пользователя в базе и пароль пользователя. Возвращается идентификатор
регистрации в системе (Oracle
Login Data Area). Несколько доступов могут осуществляться
одновременно. Эта функция эквивалентна функции OCI(Oracle Call Interface) olon или orlon. $csr = &ora_open($lda, $statement [,$cache]) Для определения SQL-запроса в базу данных программа должна вызывать функцию &ora_open. Эта функция имеет как минимум два параметра: идентификатор регистрации и SQL выражение. Необязательный третий параметр описывает размер буфера строк для SELECT оператора. Возвращается курсор Oracle. Если третий параметр опущен, то используется стандартный размер буфера. $csr = &ora_open($lda,'select ename, sal from emp order by ename',10); Эта функция эквивалентна функции OCI oopen
или oparse.
&ora_bind($csr, $var, ...) Если SQL выражение содержит обращение к переменным языка Perl, то необходимо подставить вместо имен значения переменных. Для этого используется функция &ora_bind. $csr = &ora_open($lda, 'insert into emp values (:1,:2)'); &ora_bind($csr,$ename,$sal); - подставляет в SQL выражение вместо :1
и :2
значения переменных $ename
и $sal.
$nfields = &ora_fetch($csr[, trunc]); @array = &ora_fetch($csr); Эта функция используется с оператором SQL SELECT для извлечения информации
из базы данных и имеет только один обязательный параметр - идентификатор
курсора, полученный в результате вызова функции &ora_open. В скалярном контексте
она возвращает число выбранных строк, в списковом - массив выбранных строк.
Второй необязательный параметр содержит информацию о том, можно ли обрезать
данные типов LONG
и LONG RAW
или выдавать сообщение об ошибке. Если параметр опущен, то информация берется
из переменной $ora_trunc.
Если произошло обрезание данных, то переменная $ora_errno принимает значение 1406. Эта функция
эквивалентна функции OCI ofetch.
&ora_close($csr) Если открытый курсор не будет больше использоваться, то его нужно закрыть
вызовом функции &ora_close.
Это эквивалентно функции OCI oclose.
&ora_do($lda,$statement) Не все SQL-выражения возвращают данные или содержат переменные для подстановки. В таких случаях функция &ora_do выступает в качестве альтернативы &ora_open и &ora_close. Первым параметром является идентификатор регистрации, вторым -- SQL выражение. &ora_do($lda,'drop table employee'); это эквивалентно: &ora_close(&ora_open($lda, 'drop table employee'));
&ora_logoff($lda) Для выхода из системы используется функция &ora_logoff. Она эквивалентна функции OCI ologoff. 6.2.1.2 Дополнительные функцииДополнительные возможности предоставляются функциями @titles = &ora_titles($csr) Программа может определить название полей, содержимое которых будет
извлечено запросом, вызовом функции &ora_title.
Эта функция имеет один параметр - курсор. Заголовки обрезаются до длины поля. @length = &ora_length($csr) Программа может определить длину каждого из полей, возвращенных запросом, с
помощью вызова функции &ora_length.
Она имеет только один параметр - курсор и возвращает массив целых чисел. @types = &ora_types($csr) Программа может определить тип каждого из полей, возвращенных запросом, с
помощью вызова функции &ora_types.
Она имеет один параметр - курсор и возвращает массив целых чисел. Эти типы
определяются в документации по OCI и в файле oraperl.ph для Oracle v6. &ora_autocommit($lda,$on_or_off) Режим автоматического завершения транзакций можно установить или отменить
вызовом функции &ora_autocommit.
Эта функция имеет два параметра: идентификатор регистрации и булевскую
переменную, которая указывает действие, которое нужно выполнить. Если значение
переменной ненулевое, то режим включается, если нулевое, то отключается. По
умолчанию режим не включен. Режим включается на продолжительность пребывания в
системе. Если есть необходимость включать его только для одного оператора, то
лучше делать несколько регистраций и использовать для каждого оператора
отдельный идентификатор регистрации. &ora_commit($lda) &ora_rollback($lda) Изменения в базе данных могут быть сохранены или отменены вызовом этих
функций. Они имеют один параметр - идентификатор регистрации в системе.
Транзакции, результат которых уже был сохранен не могут быть отменены &ora_rollback.
Эти функции также действуют на все время пребывания в системе, а не на
отдельные операторы. &ora_version() Эта функция печатает версию и информацию об авторских правах, касающуюся Oraperl. Она не возвращает ничего. 6.2.1.3 ПеременныеВ модуле Oraperl.pm
есть шесть специальных переменных: 6.2.1.4 Переменные для подстановкиOraperl позволяет SQL выражению содержать обращение к переменным языка Perl. Они состоят из двоеточия и следующего за ним номера. Например: $csr = &ora_open($lda,"insert into tel values(:1,:2)"); Эти два имени :1 и :2 называются переменными для подстановки. Функция &ora_bind() используется для привязывания переменных к их значениям. &ora_bind($csr, "Annette","3-222-2-22-22-22"); &ora_bind($csr,$name,$telephone); Номера переменных должны следовать в порядке возрастания начиная с 1, так как &ora_bind выполняет подстановку именно в таком порядке. 6.3 Написание модулей CGIЯзык Perl очень широко используется при написании исполняемых модулей CGI (Common Gateway Interface) для Web. Это обусловлено прежде всего тем, что Perl предоставляет разработчикам простые и удобные средства обработки текста и взаимодействия с базами данных. Наша цель - лишь дать пример использования Perl для написания CGI-модуля. Рассмотрим простую подпрограмму разбора входного потока CGI-программы (при передаче параметров используется метод POST ). #!/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-модулю в командной строке, то
они помещаются в служебный массив @ARGV.
Например, если параметры пишуться в URL: 6.4 Обработка файлов формата DBFДля взаимодействия с файлами этого формата существует специальный модуль - Xbase.pm На текущий момент поддерживается только возможность чтения таких файлов. Этот модуль подключается стандартным образом: use Xbase; Новый Xbase объект создается следующим образом: $database = new Xbase; Будет создан объект $database, который в дальнейшем будет использоваться для взаимодействия со всевозможными методами, которые поддерживает модуль. Доступ к базе данных осуществляется следующим образом: $database->open_dbf($dbf_name,$idx_name); Мы ассоциировали DBF-файл и необязательный индексный файл с объектом. Чтобы определить тип (database type) можно сделать следующее: print $database->dbf_type; Вернется строка, которая, если Xbase файл открыт, будет содержать значение DBF3, DBF4 или FOX. Чтобы узнать дату последнего обновления делается следующее: print $database->last_update; Возвращает строку с датой. $end=$database->lastrec; Вернется номер последней записи в файле с базой данных. $database->dbf_stat; В стандартный выходной поток будет напечатана информация о статусе и
структуре базы данных. Этот метод работает аналогично команде display status. $database->idx_stat; Печатает в стандартный выходной поток (STDOUT) информацию о статусе
открытого IDX-файла. $database->go_top; Передвигает курсор чтения на физическое начало файла,если индексы не
существуют и на первую запись, соответствующую порядку, который задается
индексом, в противоположном случае. $database->go_bottom; Передвигает курсор чтения на физический конец файла,если индексы не
существуют и на последнюю запись, соответствующую порядку, который задается
индексом, в противоположном случае. $database->go_next; Эквивалентно команде skip
1, которая передвигает курсор на следующую запись. $database->go_prev; Эквивалентно команде skip
-1, которая передвигает курсор на предыдущую запись. $stat=$database->seek($keyvalue); Эта команда устанавливает курсор на первую запись, соответствующую данному
ключу. Но в данном случае база данных должна быть открыта с соответствующим
индексом, в противоположном случае будет выдано сообщение об ошибке и исполнение
прекратиться. Возвращается значение, содержащее информацию о том, был ключ
найден или нет. $current_rec=$database->recno; Метод bof возвращает значение true, если курсор находится в самом начале файла. if ($database->bof) { print " At the very top of the file \n"; } Аналогично действует метод eof: if ($database->eof) { print " At the very end of the file \n"; } Чтобы прочитать содержимое какого-либо поля записи можно поступить так: print $database->get_field("NAME"); Возвращает строку с содержимым поля. Если данная запись помечена для
удаления, то использует псевдоимя поля _DELETED. @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; #печатаем номер последней записи |
|||||
|