Hello Everybody.
I want to call C program from PL/SQL but still without success (I spend sever hours on google I have tried almost everything), but I am still getting this error:
ORA-06520: PL/SQL: Error loading external library
ORA-06522: Unable to load DLL
My Config:
ORACLE: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
ORACLE_CLIENT: 12c - 32bit - runtime
OS: Windows 10 - 64bit
# listener.ora Network Configuration File: C:\ORACLE\product\12.1.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
C source
#include <stdio.h>
int getVal(int a)
{
return a*2;
}
int main()
{
return getVal(2);
}
C compilation
gcc -c z1.c
gcc -shared -o z1.dll z1.o
Copy DLL file
I copy the z1.dll into the C:\ORACLE\product\12.1.0\dbhome_1\BIN
and also to the C:\ORACLE_CLIENT\product\12.1.0\client_1\BIN\
listener.ora - on SERVER
TRACE_LEVEL_LISTENER = ADMIN
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxx )(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = IPC_CALL32))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ZOFFOB.erni.ch)
(ORACLE_HOME = C:\ORACLE\product\12.1.0\dbhome_1)
(SID_NAME = ZOFFO)
)
(SID_DESC =
(ORACLE_HOME = C:\ORACLE\product\12.1.0\dbhome_1)
(SID_NAME = PLSExtProc)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ANY")
)
)
ADR_BASE_LISTENER = C:\ORACLE\product\12.1.0\dbhome_1\log
tnsnames.ora - ON CLIENT and SERVER
# tnsnames.ora Network Configuration File: C:\ORACLE\product\12.1.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
ZOFFO =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxxxx)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ZOFFOB.erni.ch)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = IPC_CALL32))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
Connected as SYS
Library:
CREATE OR REPLACE LIBRARY z1_lib AS 'C:\ORACLE\product\12.1.0\dbhome_1\bin\z1.dll';
Package and Call Specification
CREATE OR REPLACE FUNCTION z1_run(p_a IN INTEGER) RETURN PLS_INTEGER AS
LANGUAGE c
LIBRARY sys.z1_lib NAME "getVal";
CREATE OR REPLACE PACKAGE c_pack AS
FUNCTION z1_run(p_a IN PLS_INTEGER) RETURN PLS_INTEGER;
END;
CREATE OR REPLACE PACKAGE BODY c_pack AS
FUNCTION z1_run(p_a IN PLS_INTEGER) RETURN PLS_INTEGER AS
LANGUAGE c
LIBRARY sys.z1_lib NAME "getVal";
END;
TEST
BEGIN
dbmS_OUTPUT.PUT_LINE( c_pack.z1_run(2) );
END;
When I run the test I still have the same error describe in the begging
ORA-06520: PL/SQL: Error loading external library
ORA-06522: Unable to load DLL
I have tried everything but still same error, please can you tell me what is the problem.
Thank You
JZ