ПРИЛОЖЕНИЕ D ---------------------------------------------------------------- ФРАЗА WITH INTERFACE В этом приложении объясняется, как использовать фразу WITH INTERFACE, чтобы определить интерфейс между пакетированной процедурой и программой на языке 3-го поколения (3GL). Такой интерфейс, при наличии продукта SQL*Module, позволяет вашим программам 3GL вызывать процедуры PL/SQL, хранимые в базе данных ORACLE. ---------------- Объявление интерфейса Необязательная фраза WITH INTERFACE может следовать за спецификацией процедуры, но не за спецификацией функции. Процедура должна быть общей (глобальной) пакетированной процедурой. Вы кодируете фразу WITH INTERFACE в спецификации пакета, используя следующий синтаксис: PROCEDURE имя_процедуры [ (формальные_параметры) ] [ WITH INTERFACE PROCEDURE имя_интерфейса [ (параметры_интерфейса) ] ]; где параметры_интерфейса имеют следующий синтаксис: имя_параметра тип_данных [INDICATOR имя_индикатора], имя_параметра тип_данных [INDICATOR имя_индикатора], ... Применимы следующие правила: * Имя процедуры и имя интерфейса могут совпадать. * Каждый формальный параметр и индикаторный параметр должен появиться среди параметров интерфейса. * Одним из параметров интерфейса может быть переменная с именем sqlcode типа INTEGER, не имеющая индикатора. * Все типы данных должны быть типами ANSI/ISO SQL. Фраза WITH INTERFACE ставит в соответствие каждому формальному параметру PL/SQL параметр интерфейса, предоставляет необязательные индикаторы, и специфицирует порядок параметров интерфейса. В следующем примере пакетированная процедура stored_proc имеет интерфейс с именем external_proc, который принимает пять параметров: PROCEDURE stored_proc (num NUMBER, ch CHAR) WITH INTERFACE PROCEDURE external_proc (num INTEGER INDICATOR num_ind, num_ind SMALLINT, ch CHAR(10) INDICATOR ch_ind, ch_ind SMALLINT, sqlcode INTEGER); Формальные параметры num и ch отображаются на параметры интерфейса путем повторения их имен в фразе WITH INTERFACE. Заметьте, что переменные num и ch ассоциированы с индикаторами num_ind и ch_ind соответственно. D-2 Руководство пользователя и справочник по PL/SQL ---------------- Вызов хранимой процедуры SQL*Module позволяет программе 3GL вызывать хранимую процедуру при соблюдении двух условий: (1) процедура должна быть объявлена с фразой WITH INTERFACE, и (2) один из параметров ее интерфейса должен иметь имя sqlcode. SQL*Module использует содержимое фразы WITH INTERFACE для генерации интерфейсной подпрограммы 3GL, которая связывает спецификацию процедуры PL/SQL с вызывающей программой. Фактически, фраза WITH INTERFACE предоставляет программам 3GL прототип, посредством которого они могут вызывать ассоциированную подпрограмму PL/SQL. Следующий пример показывает такой прототип функции C для типичной 32-битовой архитектуры: extern void external_proc(long num, short num_ind, char *ch, short ch_ind, long sqlcode); Чтобы выполнить пакетированную процедуру stored_proc, ваша программа 3GL вызывает external_proc, передавая ей пять параметров. SQL*Module обеспечивает вызов процедуры stored_proc из external_proc.