Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DLL-Funktionen in ORACLE nutzen (https://www.delphipraxis.net/89092-dll-funktionen-oracle-nutzen.html)

r_kerber 26. Mär 2007 09:31

Datenbank: Oracle • Version: 9.2i, 10g

DLL-Funktionen in ORACLE nutzen
 
Moin moin,

ORACLE bietet ja die Möglichkeit, c-Funktionen aus externen DLL's in PL/SQL aufzurufen. Folgendes habe ich ich bereits eingerichtet:

SQL-Code:
CREATE OR REPLACE LIBRARY RKE.meine_dll
 IS 'D:\dll\meine_dll.dll';

CREATE OR REPLACE FUNCTION RKE.meine_funktion (
  strPar1 IN VARCHAR2,
  strPar2 IN VARCHAR2,
  strPar3 IN VARCHAR2,
  strPar4 IN VARCHAR2,
  strPar5 IN VARCHAR2,
  strPar6 IN VARCHAR2,
  strPar7 IN VARCHAR2,
  strPar8 IN VARCHAR2,
  lngPar9 IN NUMBER)
RETURN BOOLEAN
AS LANGUAGE C
   LIBRARY rke.meine_dll
   NAME "meine_funktion";

CREATE OR REPLACE PACKAGE RKE.mein_package
IS
  FUNCTION MyFunction(Param1 IN NUMBER) RETURN NUMBER;
END;
/

CREATE OR REPLACE PACKAGE BODY RKE.mein_package
AS
FUNCTION MyFunction(Param1 IN NUMBER) RETURN NUMBER
IS
  i BOOLEAN;
BEGIN
  i := rke.meine_funktion ('3', '', 'WOTAN', '', '', '', '', '', 0);
  RETURN (0);
END;
--------------------------------------------------------------------------------
END;
/
Beim Ausführen erhalte ich jetzt folgende Fehlermeldung:
Zitat:

ORA-28575: RPC-Verbindung mit externer Prozedurverarbeitung kann nicht geöffnet werden
ORA-06512 : in "RKE.meine_funktion", Zeile 1
ORA-06512 : in "RKE.mein_package", Zeile 7
ORA-06512 : in Zeile 8
Was muß ich in der Oracle-Datenbank noch einrichten, damit der Zugrif auf externe DLL's funktioniert?

Elvis 26. Mär 2007 09:55

Re: DLL-Funktionen in ORACLE nutzen
 
Wie sehen TnsNames.ora und Listener.ora des Servers aus?
Oder um uns die ganzen Roundtrips aus Frage & Antwort zu sparen: Wie sieht es aus wenn du es so versuchst?

r_kerber 26. Mär 2007 10:46

Re: DLL-Funktionen in ORACLE nutzen
 
listener.ora
# listener.ora Network Configuration File: d:\oracle\product\10.2.0\db_2\network\admin\listen er.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = d:\oracle\product\10.2.0\db_2)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
)
)


tnsnames.ora
MYDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = servicename)
)
)

Den Link schaue ich mir gerade an. Habe schon diverse ähnlich aussehende Hinweise bekommen. Nachdem ich diese versucht habe einzubauen, startete der Listener nicht mehr. :gruebel:

r_kerber 26. Mär 2007 14:34

Re: DLL-Funktionen in ORACLE nutzen
 
So ich habe jetzt versucht, einige der im Link und anderen Quellen aus dem I-Net beschriebenen Vorschläge umzusetzen:
listener-ora
# listener.ora Network Configuration File: d:\oracle\product\10.2.0\db_2\network\admin\listen er.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ENVS = "LD_LIBRARY_PATH=D:\Programmierung\dll_Pfad")
(ORACLE_HOME = d:\oracle\product\10.2.0\db_2)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
)
)
)

tnsnames.ora
extproc_connection_data =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = extproc))
(CONNECT_DATA = (SID = PLSExtProc))
)

Mit den Angaben bei ENVS habe ich auch noch etwas "herumgespielt" (Es gibt ja noch EXTPROC_DLLS). Aber entweder bekomme ich wieder den bereits beschriebenen RPC-Fehler oder den Fehler Invalid DLL-Path.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz