|
Программирование >> Oracle
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), сообщения будут выдаваться на английском языке. -Прим. научн. ред.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |