AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken DLL-Funktionen in ORACLE nutzen
Thema durchsuchen
Ansicht
Themen-Optionen

DLL-Funktionen in ORACLE nutzen

Offene Frage von "r_kerber"
Ein Thema von r_kerber · begonnen am 26. Mär 2007 · letzter Beitrag vom 26. Mär 2007
Antwort Antwort
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#1

DLL-Funktionen in ORACLE nutzen

  Alt 26. Mär 2007, 09:31
Datenbank: Oracle • Version: 9.2i, 10g
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?
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: DLL-Funktionen in ORACLE nutzen

  Alt 26. Mär 2007, 09:55
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?
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

Re: DLL-Funktionen in ORACLE nutzen

  Alt 26. Mär 2007, 10:46
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.
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#4

Re: DLL-Funktionen in ORACLE nutzen

  Alt 26. Mär 2007, 14:34
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz