7.1 Введення
7.2 Призначення і схема роботи
7.3 Склад
7.4 Установка
7.5 Використання
7.6 Специфікація процедур пакету htp
7.1 ВведенняУ цьому розділі звіту описується вільно - поширюване програмне забезпечення - пакет WOW. Для освоєння цього матеріалу необхідне знання мови SQL і його процедурного розширення PL / SQL від фірми Oracle. Крім цього необхідно знання основ адміністрування сервера Oracle. Інформацію з PL / SQL Ви можете отримати з документації по серверу Oracle, книга "PL / SQL Users Guide and Reference". Інформацію про основи адміністрування сервера Oracle можна отримати з цієї ж документації, книга "Oracle7 Server Administration Guide".
Пакет WOW призначений для використання під ОС Unix.
7.2 Призначення і схема роботиПакет WOW призначений для обробки запитів від WWW - серверу (Web -) до SQL - сервера Oracle (-Oracle-) з генерацією динамічних HTML - документів (-Web). Розробник додатків, що використовує WOW оперує тільки з рідною мовою Oracle - PL / SQL, що є процедурним розширенням мови SQL. Це обумовлює високу ефективність розробки додатків. Обробка створених додатків безпосередньо в сервері Oracle визначає високу швидкість виконання додатків.
Основна ідея пакету WOW - перетворення запиту до WWW - серверу у виклик певної процедури PL / SQL. Як параметри процедури, використовуються дані із запиту до WWW - серверу. Крім цього, мова PL / SQL доповнюється функціями виведення різних даних у форматі HTML. Сфера технологічних рішень пакету наведена на рис. 7-1.
7.3 СкладСтруктурно, WOW складається з ряду виконуваних програм, відповідних специфікації CGI і набору пакетів PL / SQL (див. рис. 7-2).
Пакет htp містить процедури і функції, що полегшують формування HTML - документа. Пакет htf містить опис різних констант і функцій, що використовуються при формуванні HTML - документів.
7.4 УстановкаДля коректної роботи пакета необхідно правильно провести процедуру установки. Пакет WOW вимагає близько 2Mb дискового простору. На базовому сервері повинні бути встановлені:
операційна система сімейства Unix; WWW - сервер; сервер баз даних Oracle або мережевий стек Oracle SQL * Net з можливістю доступу до віддаленого сервера баз даних Oracle. Етап IУ випадку, коли пакет поставляється у вигляді вихідних текстів, необхідно зробити компіляцію і збірку виконуваного модуля wowstub. При складанні wowstub необхідно використовувати бібліотеки встановленого сервера Oracle або мережевого стека SQL * Net. Компіляція і збірка проводиться утилітою make на підставі даних файлу Makefile. Вам необхідно змінити ряд параметрів Makefile для налаштування на Вашу конфігурацію Oracle і Unix:
ORACLE_HOME - повинен збігатися з каталогом, певним змінної ORACLE_HOME сервера Oracle. DEST_DIR - повинен вказувати на каталог, який зберігає CGI модулі Вашого WWW сервера. DOC_ROOT - повинен вказувати на каталог в якому буде розміщена документація по WOW. Каталог повинен бути доступний для WWW сервера. Етап IIНезалежно від складання wowstub, необхідно створити ряд структур даних у БД Oracle.
Створити користувача, через якого WOW буде здійснювати доступ до даних і виконання робочих процедур. Зазвичай використовується ім'я WWW. Створити з під вищезгаданого користувача всі необхідні структури даних і приклади. Для цього необхідно виконати наступні SQL файли, що йдуть в дистрибутиві WOW: wow.sql, ht.sql, math.sql, emp.sql, showemp.sql, hanoi.sql. Виконати ці файли можна з використанням однієї з наступних утиліт: SQL * Plus, SQL * DBA, Server Manager, Enterprize Manager. Етап IIIНеобхідно помістити модуль wowstub в каталог CGI програм Вашого WWW сервера. Необхідно перевизначити ряд параметрів файлу wow, що представляє собою скрипт sh:
ORACLE_HOME - відповідно до параметром ORACLE_HOME Вашого сервера Oracle або стека SQL * Net; TWO_TASK - відповідно до параметром TWO_TASK клієнтської частини Вашого сервера Oracle; WOW_UID - згідно з ім'ям користувача і його паролем, створеними на етапі II установки.У випадку якщо Ви використовуєте версію від ЦНІТ НГУ, необхідно відредагувати всі 4 файлу: wow.win, wow.iso, wow.alt, wow.koi8.
Відредагований файл wow (всі 4 відредагованих файли при використанні версії від ЦНІТ НГУ) необхідно помістити в каталог для CGI - програм Вашого WWW сервера.
7.5 ВикористанняРозглянемо найпростіший приклад з використанням пакета WOW. При зверненні до WWW - серверу www.cnit.nsu.ru за URL:
http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no
відбувається наступний ланцюжок дій (див. рис. 7-3):
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
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.
Після імені процедури, через роздільник '?', Починають перераховуватися параметри процедури і їх значення у вигляді пар:=
між собою, різні параметри поділяються амперсандом '&':
= & =
Назва параметра має збігатися з назвою параметра викликається процедури. Число параметрів повинна в точності відповідати числу параметрів процедури. Якщо хоча б одна з цих вимог не дотримано, Ви отримаєте повідомлення про помилку. Порядок вказівки параметрів значення не має. Великі і малі літери в назві параметрів рівнозначні.
Кількість реально переданих параметрів може і не збігатися з числом параметрів, зазначених у специфікації процедури. У цьому випадку, всі опускаються параметри повинні мати значення за замовчуванням.
Приклад:
http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no
Виходячи з описаного механізму роботи пакета WOW можна сформулювати основні вимоги до PL / SQL - процедурам, що обробляє запити від WWW - серверу.
Всі вхідні змінні, що передаються через WOW в процедуру завжди мають тип varchar2. Якщо Ви хочете використовувати будь - якій іншій тип даних, необхідно використовувати функції перетворення з varchar2. У пакеті htp відсутні функції виведення початку і кінця 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 ('');
- Висновок назви сторінки та заголовка
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;
/
При цьому мається на увазі що у схемі WWW Oracle знаходиться таблиця приблизно наступної структури:
Create table Результати_опроса (Прізвище varchar2 (30),
Ім'я varchar2 (14),
По батькові varchar2 (20),
Відповідь varchar2 (3));
Звертатися до пакету WOW можна і з форм HTML. Нижче наведено приклад звернення до того ж пакету example з найпростішої форми.
Тестова форма
Тестова форма
Введіть відповідь:
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 | - Закриває поточну форму. |
Процедури виведення: | |
procedure print (cbuf in varchar2), procedure print (dbuf in date), procedure print (nbuf in number) | - Виводять значення різних типів. |
Синоніми для процедури print - p: | |
procedure p (cbuf in varchar2), procedure p (dbuf in date), procedure p (nbuf in number). | |
Процедури, що виводять постійні значення: | |
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 divOpen | - Початок форматованого тексту. |
procedure divClose | - Закінчення форматованого тексту. |