Использование технологий WWW для доступа к базам данных

Использование


Рассмотрим простейший пример с использованием пакета WOW.

При обращении к WWW - серверу

www.cnit.nsu.ru

по URL:

http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no

происходит следующая цепочка действий

(см. ):

  • WWW - сервер интерпретирует

    это обращение как запуск CGI - программы

    wow.win.

  • Программа wow.win

    интерпретирует параметры как вызов процедуры test

    пакета example



    с параметром answer

    имеющим значение no,

    созданной в схеме WWW

    сервера Oracle.

  • Сервер Oracle исполняет

    эту процедуру и все процедуры и функции,

    вызываемые из нее. Выходные

    данные, представляющие динамически

    созданный HTML - документ,

    передаются программе wow.win.

  • Программа wow.win перекодирует

    выходной документ в кодировку Microsoft

    CodePage 1251, используемую в Windows

    - приложениях, и передает

    его WWW - серверу.

  • WWW - сервер возвращает

    созданный документ, как результат

    запроса, WWW - клиенту.

    URL, обращающийся к процедуре

    PL/SQL должен быть построен

    по определенным правилам и содержать ряд элементов:

  • Указатель на модуль пакета WOW,

    находящийся в каталоге CGI

    - программ. Расширение

    программы wow

    - .koi8, .win, .iso,

    .alt определяет кодировку WWW

    - клиента:

  • КОИ-8

  • Microsoft Code Page 1251

  • ISO 8859-5

  • Microsoft Code Page 866

    Например:

    http://www.cnit.nsu.ru/cgi-bin/wow.win

  • Имя процедуры PL/SQL, к

    которой происходит обращение. Модули

    пакета используют схему и регистрационные данные пользователя

    www

    БД Oracle. Таким образом,

    вызываемая PL/SQL - процедура

    должна быть доступна пользователю www

    на исполнение. Если

    процедура (test)

    создана прямо в схеме www,

    необходимо просто указать ее имя:

    http://www.cnit.nsu.ru/cgi-bin/wow.win/test

    Если процедура входит в состав пакета

    (example), созданного в схеме www,

    необходимо добавить имя пакета и имя процедуры:

    http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test

    Когда пакет создан в другой

    схеме Oracle, необходимо указывать

    и имя схемы. Например,

    для схемы fancy


    получим:

    http://www.cnit.nsu.ru/cgi-bin/wow.win/fancy.example.test

    Пользователь www

    должен иметь права на исполнение этой процедуры,

    явно предоставленные оператором GRANT

    языка SQL.

  • После имени процедуры, через

    разделитель '?', начинают

    перечисляться параметры процедуры и их значения в виде пар:

    <название_параметра>

    = <значение_параметра>

    между собой, различные параметры

    разделяются амперсандом '&':

    <название_параметра1>=<значение_параметра1>&<название_параметра2>=

    <значение_параметра2>

    Название параметра должно совпадать с названием параметра вызываемой

    процедуры. Число параметров

    должно в точности соответствовать числу параметров процедуры.

    Если хотя бы одно из этих требований не соблюдено,

    Вы получите сообщение об ошибке.

    Порядок указания параметров значения не имеет.

    Большие и маленькие буквы в названии параметров равнозначны.

    Число реально передаваемых параметров может и не совпадать с числом

    параметров, указанных в спецификации

    процедуры. В этом случае,

    все опускаемые параметры должны иметь значения по умолчанию.

    Пример:

    http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no

    Исходя из описанного механизма работы пакета WOW

    можно сформулировать основные требования к PL/SQL

    - процедурам, обрабатывающим

    запросы от WWW - сервера.

  • Все входные переменные, передающиеся

    через WOW в процедуру всегда

    имеют тип varchar2. Если Вы

    хотите использовать какой - либо другой тип данных,

    необходимо использовать функции преобразования из varchar2.

  • В пакете htp отсутствуют

    функции вывода начала и конца HTML

    - документа. Поскольку

    многие современные броузеры интерпретируют текст без обрамляющих

    тегов <HTML> ... </HTML>

    как преформатированный, необходимо

    прямо задавать эти теги в начале и конце документа.

    Пример пакета example:

    Create or Replace package example is

    procedure test(answer in Varchar2);

    end;

    /

    Create or Replace package body example



    is

    procedure test(answer in Varchar2) is

    ответ varchar2(3);

    cursor c_man(ans in varchar2) is select

    Фамилия from Результаты_опроса where Ответ=ans order by Фамилия;

    begin

    -- Начало документа

    htp.p('<HTML>');

    -- Вывод названия страницы и заголовка

    if answer = 'no'

    then

    ответ:='НЕТ';

    htp.htitle('Фамилии людей, ответивших

    отрицательно');

    else

    ответ:='ДА';

    htp.htitle('Фамилии людей, ответивших

    положительно');

    end if;

    htp.olistopen;

    -- Начало нумерованного списка

    for man in c_man(Ответ) loop

    -- Элемент списка

    htp.item(man.Фамилия);

    end loop;

    -- Конец нумерованного списка

    htp.olistclose;

    -- Конец документа

    htp.p('</HTML>');

    end;

    end;

    /

    При этом подразумевается что в схеме WWW

    Oracle находится таблица примерно следующей структуры:

    Create table Результаты_опроса(Фамилия

    varchar2(30),

    Имя varchar2(14),

    Отчество varchar2(20),

    Ответ varchar2(3));

    Обращаться к пакету WOW можно и из форм HTML.

    Ниже приведен пример обращения к тому же пакету example

    из простейшей формы.

    <HTML>

    <HEAD>

    <TITLE>Тестовая форма</TITLE>

    </HEAD>

    <BODY>

    <H1>Тестовая форма</H1>

    <FORM ACTION="http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test">

    Введите ответ:<INPUT NAME="answer">

    <INPUT VALUE="Найти" TYPE="SUBMIT">

    </FORM>

    </BODY>

    </HTML>


    Содержание раздела