ПРИЛОЖЕНИЕ 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.