letzte Änderung:
TCP-States
Netzwerk
Links
Australien
Wertpapiere
|
Wie man aus einer Oracle Datenbank Funktionen einer eigenen Shared-Lib (DLL) aufruft
Claus Ebert
Version 0.01
Kurzes Beispiel eines Aufrufes einer Funktion einer externen Library (hat zumindest mit Oracle 8 funktioniert)
1.1 Makefile und Source einer (sehr) simplen Shared-Lib
Da ich das ganze unter Sun Solaris am laufen habe ... ist das hier alles
auf Oracle 8 unter Solaris 8 zugeschnitten.
Zuerst der Beispiel-Source in ANSI-C:
#include <stdio.h>
#include <stdlib.h>
int ExecCommand(char *cmd)
{
if (NULL != cmd)
{
return system(cmd);
}
return 0;
}
Ich verwende hier den CC der Sun Workshops. Theoretisch sollte
der GCC hier auch funktionieren
Jetzt das dazu passende Makefile:
CC=/opt/prod/studio8/SUNWspro/bin/cc
all:
@echo "Supported targets:"
@echo " m32 - to build a 32 bit Version"
@echo " m64 - to build a 64 bit Version"
@echo " clean - remove all build files"
@echo " test - build small test binary"
m32:
$(CC) -G -xarch=v7 -Kpic $(LDFLAGS) system_call.c -o system_call.so
m64:
$(CC) -G -xarch=v9 -KPIC system_call.c -o system_call.so
test:
$(CC) -o test test.c system_call.so
@echo "Run test program with: LD_LIBRARY_PATH=. ./test"
clean:
rm -f system_call.o system_call.so test
top
1.2 Das Package erstellen, mit dem auf die external Lib zugegriffen werden kann
Das Zugriffs-Package wird wie folgt erstellt:
CREATE OR REPLACE LIBRARY SYSTEM_CALL
AS '/opt/tdb/V/lib/system_call.so'
/
Und nun der Package Header:
CREATE OR REPLACE PACKAGE CALL_TEST
IS
FUNCTION ExecuteCommand (
COMMAND IN OUT VARCHAR2
)
RETURN BINARY_INTEGER;
END CALL_TEST;
/
Der Package-Body:
CREATE OR REPLACE PACKAGE BODY CALL_TEST
AS
/************************************************************************
ExecuteCommand - Funktion zum ausfuehren eines UNIX Kommandos ueber
eine externe Prozedur. Bei externen Prozeduren tritt keine Ausnahme auf,
was die Fehlersuche etwas erschwert. Es wird lediglich ein Returncode
zurueckgegeben. Zur Fehlerverfolgung muss das aufgerufene UNIX Kommando
eine Log- bzw. Fehlerdatei schreiben.
************************************************************************/
FUNCTION ExecuteCommand (
COMMAND IN OUT VARCHAR2)
RETURN BINARY_INTEGER IS EXTERNAL
LIBRARY SYSTEM_CALL
NAME "ExecCommand"
LANGUAGE C
CALLING STANDARD C
WITH CONTEXT
PARAMETERS (
COMMAND BY REFERENCE STRING,
CONTEXT,
RETURN INT
);
END;
/
top
|