Программирование >>  Oracle 

1 ... 303 304 305 [ 306 ] 307 308 309 ... 469


1332

Глава 18

Как разработчик я постоянно использую этот make-файл. Обычно я изменяю только строку (4) - имя библиотеки и строку (5) - список объектн1х файлов. Остальные компоненты make-файла изменять после первоначального конфигурирования не придется.

Выполнив команду nmake, мы увидим примерно следующее:

C:\Documents and Settings\Thomas Kyte\Desktop\extproc\demo passing>nmake

Microsoft (R) Program Maintenance Utility Version 1.60.5270 Copyright (c) Microsoft Corp 1988-1995. All rights reserved.

cl -Ic:\msdev\include -Ic:\oracle\oci\include -I. -DWIN32 ->-DWIN NT -D DLL /c extproc.c

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 10.00.5270 for ->80x86

Copyright (C) Microsoft Corp 1984-1995. All rights reserved, extproc.с

link -DLL /NODEFAULTLIB:LIBC.LIB -out:extproc.dll extproc.obj с:\msdev\lib\user32.lib

с:\msdev\lib\msvcrt.lib с:\msdev\lib\oldnames.lib с:\msdev\lib\kernel32.lib с:\msdev\lib\adv api32.lib с:\oracle\precomp\lib\msvc\orasql8.lib с:\oracle\oci\lib\msvc\oci.lib

Microsoft (R) 32-Bit Incremental Linker Version 3.00.5270 Copyright (C) Microsoft Corp 1992-1995. All rights reserved.

Creating library extproc.lib and object extproc.exp

Библиотека extproc.dll создана и готова использования. Теперь давайте перенесем ее в среду ОС UNIX с помощью следующего файла управления проектом:

MAKEFILE= $(ORACLE HOME)/rdbms/demo/demo rdbms.m]c (1)

INCLUDE= -I$(ORACLE HOME)/rdbms/demo \ (2)

-I$(ORACLE HOME)/rdbms/public \ -I$(ORACLE HOME)/plsql/public \ -I$(ORACLE HOME)/network/public

TGTDLL= extproc.so (3)

OBJS = extproc.о (4)

all: $(TGTDLL) (5)

clean:

rm *.o (6)

$(TGTDLL): $(OBJS)

$(MAKE) -f $(MAKEFILE) extproc callback \ (7)

SHARED LIBNAME=$(TGTDLL) OBJS=$(OBJS)

CC=cc (8)

CFLAGS= -g -I. $(INCLUDE) -Wall (9)

И в этом случае выделенные полужирн1м шрифтом числа в круглых скобках не являются частью make-файла, а указаны лишь для возможности ссылок на них в дальнейшем.



Внешние процедуры на языке С 1333

1. Имя/местонахождение стандартного make-файла Oracle. Я буду использовать этот файл для безошибочной компиляции и компоновки с необходимыми для данной платформы и версии Oracle библиотеками. Поскольку набор этих библиотек существенно отличается для каждого релиза, версии и платформы, я настоятельно рекомендую использовать этот make-файл.

2. Список каталогов для поиска включаемых файлов. Здесь я перечислил каталоги Oracle.

3. Имя создаваемой библиотеки.

4. Список файлов, образующих эту библиотеку.

5. Стандартная цель, которая будет создаваться.

6. Цель удаления временных файлов, созданных в ходе сборки проекта.

7. Фактическая цель проекта. При ее построении для создания библиотеки внешних процедур используется стандартный make-файл, поставляемый корпорацией Oracle. Это снимает все проблемы с именами и местонахождением библиотек.

8. Имя компилятора языка С, который предполагается использовать.

9. Стандартный набор опций, которые необходимо передать компилятору языка С.

С учетом того, как б1л написан код, перенос закончен. Осталось выполнить команду make и получить примерно такой результат:

$ make

cc-g -I. -I/export/home/ora816/rdbms/demo -I/export/home/ora816/rdbms/ public -I/export/home/ora816/plsql/public -I/export/home/ora816/network/ public -Wall -c extproc.с -о extproc.о

make -f /export/home/ora816/rdbms/demo/demo rdbms.mk extproc callback \

SHARED LIBNAME=extproc.SO OBJS=extproc.o make[l]: Entering directory Varia-export/home/tkyte/src/demo passing ld -G -L/export/home/ora816/lib -R/export/home/ora816/lib -o extproc.so extproc.о -lclntsh sed -e s/-ljava g /export/home/ora816/lib/ ldflags -lnsgr8 -lnzjs8 -ln8 -ln18 -lnro8 sed -e s/-ljava g / export/home/ora816/lib/ldflags -lnsgr8 -lnzjs8 -ln8 -ln18 -lclient8 -lvsn8 -lwtc8 -lcommon8 -lgeneric8 -lwtc8 -lmm -lnls8 -lcore8 -lnls8 -lcore8 -lnls8 sed -e s/-ljava g /export/home/ora816/lib/ldflags -lnsgr8 -lnzjs8 -ln8 -ln18 -lnro8 sed -e s/-ljava g /export/home/ ora816/lib/ldflags -lnsgr8 -lnzjs8 -ln8 -ln18 -lclient8 -lvsn8 -lvtc8 -lcommon8 -lgeneric8 -ltrace8 -lnls8 -lcore8 -lnls8 -lcore8 -lnls8 -lclient8 -lvsn8 -lwtc8 -lcommon8 -lgeneric8 -lnls8 -lcore8 -lnls8 -lcore8 -lnls8 cat /export/home/ora816/lib/sysliblist if [ -f /usr/lib/libsched.so ] ; then echo -lsched ; else true; fi -R/export/ home/ora816/lib -laio -lposix4 -lkstat -lm -lthread \ /export/home/ora816/lib/libpls8.a

makef[1]: Leaving directory /aria-export/home/tkyte/src/demo passing В результате, мы получили файл библиотеки extproc.so для ОС Solaris.



1334

Глава 18

Установка и запуск

Теперь, при наличии спецификации вызова, объекта-библиотеки, соответствующих типов данных, спецификации и тела пакета demo passing в файле extproc.sql, а также библиотеки extproc.dll (или extproc.so), все готово для установки нашего демонстрационного примера в базе данных. Для этого мы выполним команду @extproc.sql, а затем -ряд анонимных блоков, чтобы проверить работу внешних процедур. Необходимо настроить оператор CREATE LIBRARY так, чтобы он указывал на созданную .dll- или .so-библиотеку:

create or replace library demoPassing as

С: \<местонахождение DLL-библиотеки>\extproc. dll;

но остальная часть должна компилироваться без изменений.

Итак, после запуска сценария extproc.sql можно проверить работу внешних процедур следующим образом:

SQL> declare

2 l input number;

3 l output number;

4 begin

5 dbms output.put line(Передаем Number); б

7 dbms output.put line(Сначала проверяем передачу стых -> значений) ;

8 demo passing pkg.pass(l input, l output);

9 dbms output.put line(l input = l input -> l output = l output) ;

11 l input := 123;

12 dbms output.put line (Теперь проверяем передачу нестых ->значений ) ;

13 dbms output.put line(Предполагается, что в результате будет --> 123) ;

14 demo passing pkg.pass(l input, l output);

15 dbms output.put line(l input = l input l output = -> l output);

16 end;

17 /

Передаем Number

Сначала проверяем передачу пустых значений l input - l output -

Теперь проверяем передачу непустых значений Предполагается, что в результате будет -123 l input - 123 l output --123

PL/SQL procedure successfully completed.

Тексты сообщений в тестовом примере переведены нарусскийязык. Есливы будете использовать соответствующие коды с сайта издательства Wrox (http: www.wrox.com), сообщения будут выдаваться на английском языке. -Прим. научн. ред.



1 ... 303 304 305 [ 306 ] 307 308 309 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика