Використання
пакету Web - Oracle-Web (WOW)
7.1 Введення p>
7.2 Призначення та схема роботи p>
7.3 Склад p>
7.4 Установка p>
7.5 Забороняється використання p>
7.6 Специфікація процедур пакету htp p>
7.1 Введення
У цьому розділі звіту описується вільно - поширюване програмне забезпечення - пакет WOW. Для освоєння цього матеріалу необхідно знання мови
SQL і його процедурного розширення PL/SQL від фірми Oracle. Крім цього необхідно знання основ адміністрування сервера Oracle. Інформацію з PL/SQL
Ви можете отримати з документації по серверу Oracle, книга "PL/SQL Users Guide and Reference". Інформацію про основи адміністрування сервера
Oracle можна отримати з цієї ж документації, книга "Oracle7 Server Administration Guide". p>
Пакет WOW призначений для використання під ОС Unix. p>
7.2 Призначення та схема роботи
Пакет WOW призначений для обробки запитів від WWW - сервера ( Web - b>)
до SQL - сервера Oracle (-Oracle- b>) з генерацією динамічних HTML - документів (-Web b>). Розробник додатків, що використовує WOW
оперує тільки з рідною мовою Oracle - PL/SQL, що є процедурним розширенням мови SQL. Це обумовлює високу ефективність розробки
додатків. Обробка створених додатків безпосередньо в сервері Oracle визначає високу швидкість виконання додатків. p>
Основна ідея пакету WOW - перетворення запиту до WWW - сервера в виклик певної процедури PL/SQL. Як параметри процедури, використовуються
дані з запиту до WWW - сервера. Крім цього, мову PL/SQL доповнюється функціями виводу різних даних у форматі HTML. Сфера технологічних рішень
пакету наведена на рис. 7-1. p>
p>
7.3 Склад
Структурно, WOW складається з ряду виконуваних програм, які відповідають специфікації CGI і набору пакетів PL/SQL (див. рис. 7-2). p>
p>
Пакет htp b> містить процедури та функції, що полегшують формування HTML - документа. Пакет htf b> містить опис
різних констант і функцій, що використовуються при формуванні HTML - документів. p>
7.4 Встановлення
Для коректної роботи пакета необхідно правильно провести процедуру встановлення. Пакет WOW вимагає близько 2Mb дискового простору. На базовому
сервер повинні бути встановлені: p>
операційна система сімейства Unix;
WWW - сервер;
сервер баз даних Oracle або мережевий стек Oracle SQL * Net з
можливістю доступу до віддаленого сервера баз даних Oracle.
Етап I
У випадку, коли пакет поставляється у вигляді вихідних текстів, необхідно зробити компіляцію та складання виконуваного модуля wowstub b>. При
збірці wowstub необхідно використовувати бібліотеки встановленого сервера Oracle або мережевого стека SQL * Net. Компіляція та збирання проводиться утилітою make на
підставі даних файлу Makefile. Вам необхідно змінити ряд параметрів Makefile для настроювання на Вашу конфігурацію Oracle та Unix: p>
ORACLE_HOME - повинен співпадати з каталогом, визначеним
змінної ORACLE_HOME сервера Oracle.
DEST_DIR - повинен вказувати на каталог, який зберігає CGI модулі Вашого
WWW сервера.
DOC_ROOT - повинен вказувати на каталог в якому буде розміщена
документація з WOW. Каталог повинен бути доступний для WWW сервера.
Етап II
Незалежно від складання wowstub b>, необхідно створити ряд структур даних у БД Oracle. p>
Створити користувача, через якого WOW буде здійснювати доступ
до даних і виконання робочих процедур. Зазвичай використовується ім'я WWW b>.
Створити з під вищезгаданого користувача всі необхідні
структури даних і приклади. Для цього необхідно виконати наступні SQL
файли, що йдуть в дистрибутиві WOW: wow.sql b>, ht.sql b>,
math.sql b>, emp.sql b>, showemp.sql b>, hanoi.sql b>.
Виконати ці файли можна з використанням однієї з наступних утиліт:
SQL * Plus, SQL * DBA, Server Manager, Enterprize Manager.
Етап III
Необхідно помістити модуль wowstub b> у каталог CGI програм Вашого WWW сервера. Необхідно перевизначити ряд параметрів файлу wow b>,
що представляє собою скрипт sh: p>
ORACLE_HOME - відповідно до параметром ORACLE_HOME Вашого
сервера Oracle або стека SQL * Net;
TWO_TASK - відповідно до параметром TWO_TASK клієнтської частини
Вашого сервера Oracle;
WOW_UID - згідно з ім'ям користувача і його паролем,
створеними на етапі II установки.
У випадку якщо Ви використовуєте версію від ЦНІТ НГУ, необхідно відредагувати всі 4 файлу: wow.win b>, wow.iso b>, wow.alt b >,
wow.koi8 b>. p>
Відредагований файл wow (усі 4 відредагованих файли при використанні версії від ЦНІТ НГУ) необхідно помістити в каталог для CGI - програм Вашого
WWW сервера. p>
7.5 Забороняється використання
Розглянемо найпростіший приклад з використанням пакета WOW. При зверненні до WWW - серверу www.cnit.nsu.ru за URL: p>
http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no p>
відбувається наступний ланцюжок дій (див. рис.
7-3): p>
WWW - сервер інтерпретує це звернення як запуск CGI --
програми wow.win b>.
Програма wow.win b> інтерпретує параметри як виклик
процедури test b> пакету example b> з параметром answer b>
що мають значення no b>, створеної у схемі WWW b>
сервера Oracle.
Сервер Oracle виконує цю процедуру і всі процедури та функції,
викликаються з неї. Вихідні дані, що представляють спільні створений
HTML - документ, передаються програмі wow.win. B>
Програма wow.win перекодує вихідний документ у кодування
Microsoft CodePage 1251, яка використовується в Windows - додатках, і передає
його WWW - сервера.
WWW - сервер повертає створений документ, як результат запиту,
WWW - клієнта.
p >
URL, який звертається до процедури PL/SQL повинен бути побудований за певними правилами і містити ряд елементів: p>
Покажчик на модуль пакету WOW, що знаходиться в каталозі CGI --
програм. Розширення програми wow b> - . Koi8 b>, . Win b>,
. iso b>, . alt b> визначає кодування WWW - клієнта:
КОИ-8
Microsoft Code Page 1251
ISO 8859-5
Microsoft Code Page 866
Наприклад:
http://www.cnit.nsu.ru/cgi-bin/wow.win p>
Назва процедури PL/SQL, до якої відбувається обіг. Модулі
пакету використовують схему та реєстраційні дані користувача www b>
БД Oracle. Таким чином, яка викликається PL/SQL - процедура має бути
доступна користувачеві www b> на виконання. Якщо процедура ( test b>)
створена прямо у схемі www b>, необхідно просто вказати її ім'я:
http://www.cnit.nsu.ru/cgi-bin/wow.win/test p>
Якщо процедура входить до складу пакету ( example b>), створеного в схемі www b>, необхідно додати ім'я пакету та ім'я процедури: p>
http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test p>
Коли пакет створений в іншій схемі Oracle, необхідно вказувати ім'я і схеми. Наприклад, для схеми fancy b> отримаємо: p>
http://www.cnit.nsu.ru/cgi-bin/wow.win/fancy.example.test p>
Користувач www b> повинен мати права на виконання цієї процедури, явно надані оператором GRANT мови SQL. p>
Після імені процедури, через роздільник '?', Починають
перераховуватися параметри процедури та їх значення у вигляді пар:
= b> p>
між собою, різні параметри розділяються амперсанд '&': p>
= b> & b> = b>
p>
Назва параметра має збігатися з назвою параметра викликається процедури. Число параметрів має в точності відповідати числу параметрів
процедури. Якщо хоча б одне з цих вимог не дотримано, Ви отримаєте повідомлення про помилку. Порядок вказівки параметрів значення не має. Великі та
маленькі літери в назві параметрів рівнозначні. p>
Число реально переданих параметрів може й не збігатися з числом параметрів, зазначених у специфікації процедури. У цьому випадку, все опускається
параметри повинні мати значення за замовчуванням. p>
Приклад:
http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no p>
Виходячи з наведеного механізму роботи пакета WOW можна сформулювати основні вимоги до PL/SQL - процедур, обробляє запити від WWW --
сервера. p>
Всі вхідні змінні, що передаються через WOW в процедуру завжди
мають тип varchar2. Якщо Ви хочете використовувати будь - який інший тип
даних, необхідно використовувати функції перетворення з varchar2.
У пакеті htp відсутні функції виведення початку і кінця HTML --
документа. Оскільки багато сучасних броузери інтерпретують текст без
обрамляють тегів ... як преформатірованний,
необхідно прямо задавати ці теги на початку та в кінці документа.
Приклад пакета example b>:
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 ('');
- Висновок назви сторінки і заголовка
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 ('');
end;
end;
/ P>
При цьому мається на увазі що у схемі WWW Oracle знаходиться таблиця приблизно наступної структури: p>
Create table Результати_опроса (Прізвище varchar2 (30),
Назва varchar2 (14),
По-батькові varchar2 (20),
Відповідь varchar2 (3)); p>
Звертатися до пакету WOW можна і з форм HTML. Нижче наведено приклад звернення до того ж пакету example b> з найпростішої форми. p>
Тестова форма
Тестова форма
Введіть відповідь:
p>
7.6 Специфікація процедур пакету htp
procedure title (ctitle in varchar2)
- Виводить назву документа (теги)
procedure htitle (ctitle in varchar2)
- Виводить назву документа і повторює його в заголовку першого рівня (теги,
)
procedure header (nsize in integer, cheader in varchar2)
- Виводить заголовок рівня nsize (теги ...)
procedure url (curl in varchar2, cname in varchar2)
- Формує cname як гіпертекстную зв'язок, що вказує на curl (теги).
procedure gif (curl in varchar2)
- Включає в документ картинку, шлях до якої curl (теги ).
procedure gif (curl in varchar2, calign in varchar2)
- Включає в документ картинку, шлях до якої curl з вирівнюванням, визначеним
параметром calign (теги ).
procedure bold (ctext in varchar2)
- Виводить текст ctext жирним шрифтом (теги ).
procedure italic (ctext in varchar2)
- Виводить текст ctext шрифтом italic (теги)
procedure item (cval in varchar2)
- Виводить cval як елемент списку (теги).
procedure formOpen (curl in varchar2)
- Створює форму з дією curl (теги).
procedure formHidden (cname in varchar2, cvalue in varchar2)
- Створює приховане поле форми для зберігання значення cvalue змінної з ім'ям cname.
procedure formPassword (cname in varchar2),
procedure formPassword (cname in varchar2, cvalue in varchar2)
- Створює поле форми для введення значення змінної - пароля з ім'ям cname і значенням по
замовчуванням cvalue.
procedure formField (cname in varchar2, nsize in integer),
procedure formField (cname in varchar2),
procedure formField (cname in varchar2, cvalue in varchar2)
- Створює поле форми для введення значення змінної з ім'ям cname довжиною nsize з
значенням за замовчуванням cvalue.
procedure formText (cname in varchar2, nrow in integer, ncol in integer)
- Створює багаторядкові поле форми (довжиною ncol, висотою nrow) для введення значення
змінної з ім'ям cname.
procedure formCheckbox (cname in varchar2)
- Створює елемент checkbox для введення значення логічної змінної cname.
procedure formRadio (cname in varchar2, cval in varchar2)
- Створює елемент radiobutton для введення одного з значень cval змінної cname.
procedure formSelectOpen (cname in varchar2)
- Створює список значень для змінної з ім'ям cname.
procedure formSelectOption (cval in varchar2)
- Додає значення cval до списку значень змінної, описаної в formSelectOpen.
procedure formSelectClose
- Закінчує список значень, відкритий formSelectOpen.
procedure formDo (cname in varchar2)
- Створює кнопку типу SUBMIT поточної форми з ім'ям cname.
procedure formDo
- Створює кнопку типу SUBMIT поточної форми з назвою 'Submit'.
procedure formUndo (cname in varchar2)
- Створює кнопку типу RESET поточної форми з ім'ям cname.
procedure formUndo
- Створює кнопку типу RESET поточної форми з назвою 'Reset'.
procedure formClose
- Закриває поточну форму.
Процедури висновки: b>
procedure print (cbuf in varchar2),
procedure print (dbuf in date),
procedure print (nbuf in number)
- Виводять значення різних типів.
Синоніми для процедури print - p: b>
procedure p (cbuf in varchar2),
procedure p (dbuf in date),
procedure p (nbuf in number). b>
Процедури, що виводять постійні значення: b>
procedure line
- Розділова лінія (тег).
procedure para
- Початок параграфу (тег
).
procedure nl
- Переклад рядка (тег
).
procedure item
- Елемент списку (тег).
procedure ulistOpen
- Початок ненумерованого списку (тег).
procedure ulistClose
- Закінчення ненумерованого списку (тег).
procedure olistOpen
- Початок нумерованого списку (тег).
procedure olistClose
- Закінчення нумерованого списку (тег).
procedure dlistOpen
- Початок списку визначень (тег).
procedure dlistClose
- Закінчення списку визначень (тег).
procedure dterm
- Термін списку визначень (тег).
procedure ddef
- Визначення терміну (тег).
procedure preOpen
- Початок форматованого тексту.
procedure preClose
- Закінчення форматованого тексту.