Рекомендации из журнала Oracle Developer (III)
14 июля 2000 г.
Рекомендации разработчикам приложений Oracle, полученные от них самих
[От редакции Russian Oracle Internet Magazine]
В данном выпуске публикуются следующие два номера из списка “Рекомендаций журнала Oracle Developer”. В дальнейшем, в течение нескольких недель мы опубликуем все эти этюды. Насколько нам известно, отдельного сайта у журнала Oracle Developer нет. Указанный почтовый адрес мы не проверяли. Но много интересной информации, в том числе относящейся к журналу Oracle Developer, можно найти, обратившись по адресу http://www.pinpub.com.
Редакция ROIM не несет ответственности за обязательства редакции Oracle Developer.
[От редакции Oracle Developer]
Представляем вам несколько рекомендаций из журнала Oracle Developer. Если у вас есть интересные опыты по программированию, которыми вы хотели бы поделиться с другими пользователями, запишите их и отправьте по адресу oracledev@pinpub.com. Лучшие из полученных опусов появятся здесь (Oracle Developer Tips) и, возможно, даже в наших информационных бюллетенях. Если ваши рекомендации будут опубликованы в Oracle Developer, вы получите 25$ и копию номера журнала, в котором появились ваши рекомендации.
- Как определить, какое “поле должно быть введено” (http://oramag.ru/default.htm?rub=3&ID=198) .
- Разворачивание Oracle WebForms
(http://oramag.ru/default.htm?rub=3&ID=198) .
- Эффективный вызов Java-скриптов из PL/SQL (http://oramag.ru/default.htm?rub=3&ID=208) .
- Рекомендации по определению доменов в Designer/2000 (http://oramag.ru/default.htm?rub=3&ID=198) .
- Как сконфигурировать Oracle WebServer для использования Web Request Broker.
- Oracle8: объектные типы и ограничения целостности.
- Функция owa_util.get_cgi_env возвращает IP адрес.
- В случае сомнения используйте процедуру htp.p.
- Используйте стандарты наименования модулей в Designer/2000.
- Run Forms версии 4.5 в среде Windows 3.1 без ужасных GPF.
- Настройте отчет Constraint Definition (Описание ограничений целостности) в Designer/2000 .
- Быстрая инсталляция Oracle Designer/2000.
- Установка свойств, которые не могут быть изменены, для объектов в Forms 4.5.
- Реинжиниринг в Designer/2000.
- Три полезных стратегии блокирования.
- Запуск асинхронных Windows сессий из Developer/2000.
Как скофигурировать Oracle WebServer для использования Web Request Broker
Рик Окин (Rick Okin)
В рекомендации, опубликованной в июльском номере журнала Oracle Developer за 1997 год (Michael King "Install Oracle WebServer to Use the Web Request Broker") указывалось, что если вы инсталлируете Oracle WebServer (OWS), используя настройки по умолчанию, то в качестве механизма для обслуживания PL/SQL запросов, OWS скорее всего будет использовать CGI, а не Web Request Broker (WRB). Я прислушался к совету Кинга и обнаружил (к моему большому удивлению), что я использую CGI, а не WRB.
Ниже описано, как я изменил CGI на WRB.
1. Перейдите на страницу администрирования листнера (Listener Administration Page) и измените листнер.
2. Перейдите к секции Directory Mapping и сотрите значение вашего DCD. В моем случае, DCD имеет значение /owa_default_service/ и выглядит следующим образом на странице листнера:
File-System Directory = D:\ORANT\OWS20\bin\
Virtual Directory = /owa_default_service/
Flag = CN
Поскольку вы очистили значения параметров File System и Virtual Directory, эти параметры будут удалены, когда вы измените листнер.
3. Измените листнер.
4. Перейдите к Web Request Broker со страницы администрирования OWS.
5. Найдите секцию Applications и Directories. Добавьте значения для вашего DCD. Это значение имеет формат, отличный от формата, используемого при настройке листнера:
Virtual Path = /owa_default_service/owa
App. = OWA
Physical Path = D:\ORANT\OWS20\bin
6. Измените WRB.
7. Вернитесь к листнеру, остановите и запустите его.
Для проверки значения параметров можно посмотреть два файла в каталоге OWS20/admin: SVLISTENERNAME.CFG (используется для листнера и параметров CGI) и SVLISTENERNAME.APP (используется для параметров WRB).
Эта рекомендация впервые опубликована в Oracle Developer
Oracle8: Объектные типы и ограничения целостности
Иан Бреттелл (Ian Brettell)
Абстрактные типы данных (Abstract Data Type – ADT) в Oracle8 чуть-чуть приближают нас к главной цели: повторному использованию программных компонентов. В примере, описанном ниже, элемент строки (line item) (такой как заказ на поставку или элемент строки заявки) создается в базе данных как абстрактный тип данных:
SQL> CREATE OR REPLACE TYPE t_line_item (
item_id NUMBER
,line_no NUMBER (3)
,part_no VARCHAR2 (20)
,price NUMBER (15,5)
,qty NUMBER (9,2)
);
Type created.
Такой тип элемента строки может быть использован для создания (как показано в примере), например, объектной таблицы, хранящей элементы строк заказа на поставку:
SQL> CREATE TABLE po_items OF t_line_item;
Table created.
SQL> DESC po_items
Name Null? Type
------------------------------- -------- ----
ITEM_ID NUMBER
LINE_NO NUMBER(3)
PART_NO VARCHAR2(20)
PRICE NUMBER(15,5)
QTY NUMBER(9,2)
Объектный тип элемента строки затем может быть повторно использован при создании объектной таблицы для хранения элемента строки заявки:
SQL> CREATE TABLE req_items OF t_line_item;
Table created.
SQL> DESC req_items
Name Null? Type
------------------------------- -------- ----
ITEM_ID NUMBER
LINE_NO NUMBER(3)
PART_NO VARCHAR2(20)
PRICE NUMBER(15,5)
QTY NUMBER(9,2)
Все атрибуты (столбцы) абстрактного типа данных элемента строки используются как таблицей заказов на поставку, так и таблицей заявок. Кроме того, если я объявляю (PL/SQL) методы (процедуры/функции) в составе абстрактного типа данных, то они также могут вызываться как объектом заказов на поставку, так и объектом заявок:
SQL> CREATE OR REPLACE TYPE t_line_item (
item_id NUMBER
,line_no NUMBER (3)
,part_no VARCHAR2 (20)
,price NUMBER (15,5)
,qty NUMBER (9,2)
,MEMBER PROCEDURE approve(i_new_status IN VARCHAR2)
,MEMBER FUNCTION get_status RETURN VARCHAR2
);
Type created.
Ну, а как насчет ограничений целостности, таких как NOT NULL, CHECK и PRIMARY KEY? Объявляются ли они как часть определения абстрактного типа данных и наследуются ли обеими таблицами? К сожалению, нет, по крайней мере, в версии 8.0 Oracle8 - нет.
SQL> CREATE OR REPLACE TYPE t_line_item (
item_id NUMBER NOT NULL := 1
,line_no NUMBER (3)
,part_no VARCHAR2 (20)
,price NUMBER (15,5)
,qty NUMBER (9,2)
);
Warning: Type created with compilation errors.
SQL>
SQL> SHOW ERRORS
Errors for TYPE T_LINE_ITEM:
LINE ERROR
1/1 PLS-00156: Null constraints
not supported for object attributes.
Итак, значит ли это, что вы не можете использовать ограничения целостности, при работе с абстрактными типами данных в Oracle8? Нет, ограничения целостности могут быть объявлены, но в настоящее время это приходится делать на уровне объектной таблицы, а не на этапе определения объектного типа.
SQL> CREATE TABLE po_items OF t_line_item (
item_id NOT NULL PRIMARY KEY
,qty CHECK (qty > 0)
);
Table created.
SQL> DESC po_items
Name Null? Type
------------------------------- -------- ----
ITEM_ID NOT NULL NUMBER
LINE_NO NUMBER(3)
PART_NO VARCHAR2(20)
PRICE NUMBER(15,5)
QTY NUMBER(9,2)
К сожалению, это означает, что вы теряете возможность повторного использования описаний ограничений целостности при создании объектных таблиц – они должны создаваться вновь для каждой таблицы, основанной на абстрактном типе данных.
SQL> CREATE TABLE req_items OF t_line_item (
item_id NOT NULL PRIMARY KEY
,qty CHECK (qty > 0)
);
Table created.
Это позволяет нам иметь различные ограничения целостности для каждой объектной таблицы (например, указать, что значение столбца QTY должно быть положительным (QTY > 0) для элемента, являющегося заказом на поставку, но не для элемента заявки). Тем не менее, я надеюсь, что поддержка ограничений целостности при определении объектных типов будет реализована в следующих версиях Oracle8.
Эта рекомендация впервые опубликована в Oracle Developer
|