Объектно-ориентированное программирование в PL/SQL
Внешние процедуры
Использование внешних процедур значительно расширяет функциональность сервера, предоставляя интерфейс для вызова программ, разработанных на других языках программирования, таких как C++ или Pascal, и созданных как DLL-библиотеки.
Во время выполнения блока PL/SQL динамически загружается DLL-библиотека и происходит вызов внешней процедуры как подпрограммы PL/SQL. Внешние процедуры всегда выполняются в отдельном процессе.
Вызовы внешних процедур можно выполнять из:
- анонимных блоков PL/SQL;
- методов, объявленных в объектном типе ;
- хранимых или пакетных подпрограмм ;
- триггеров базы данных;
- SQL-операторов, вызываемых только для пакетных подпрограмм.
Для применения внешней процедуры следует сначала определить используемую DLL-библиотеку, выполнив оператор CREATE LIBRARY library_name {IS | AS} 'file_path';. Затем необходимо зарегистрировать внешнюю процедуру, указав в процедуре PL/SQL, используемой для опосредованного вызова внешней процедуры, место расположения процедуры, способ ее вызова и список передаваемых параметров.
Если DLL-библиотека c_lib.dll содержит функцию f1_ext, которая определена в С как int c_ext_f1(int x_val, int y_val);, то подпрограмма PL/SQL reg_ext_f1, выполняющая регистрацию этой внешней процедуры, может быть записана следующим образом:
CREATE FUNCTION reg_ext_f1( x BINARY_INTEGER, y BINARY_INTEGER) RETURN BINARY_INTEGER AS EXTERNAL LIBRARY c_lib - Имя внешней функции NAME "c_ext_f1" LANGUAGE C;
Для вызова внешней функции DLL-библиотеки из анонимного блока PL/SQL достаточно выполнить вызов функции PL/SQL, зарегистрированной как внешняя функция.
Например:
DECLARE var1 BINARY_INTEGER; x BINARY_INTEGER; y BINARY_INTEGER; BEGIN x:=1; y:=2; - Вызов внешней функции f1_ext: var1 := reg_ext_f1(x, y); END;