Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.tools -> DLL Call From a Stored Procedure.

DLL Call From a Stored Procedure.

From: Robert Delaware <robert_delaware_at_hotmail.com>
Date: 2000/07/31
Message-ID: <8m371f$pmg36@baran22.ttnet.net.tr>#1/1

Hi,

I have written a DLL (called as "test.dll") in C++.

I want to call some functions in it from within a stored procedure in ORACLE8's SQL terminal. But I have faced a problem : although all of the declarations seem as correct, when I run the script in an SQL terminal, it simply halts the terminal and waits forever without doing anything at all.. Why ? How should I proceed to solve the issue ?

I have read all of the corresponding documentation "PL/SQL Developer's Guide" and "Applications Developer's Guide" and tried all the examples there. They all worked as correct, but my code.

I need your kind helps in advance,

Regards,

-Robert

      int    LoadIt(char *, char *, char *, char *,
                         char *, char *, char *, char *,
                         char *, char *, int);


-------------------- code begins ------------------

create or replace library test_library is 'C:\ORANT\Test_DLL\test.dll';

CREATE OR REPLACE PACKAGE test_util
AS
  FUNCTION LOADIT(

      username                   IN  VARCHAR2,
      password                   IN  VARCHAR2,
      database                    IN  VARCHAR2,
      SourceDataFilePath   IN  VARCHAR2,
      ControlTableName    IN  VARCHAR2,
      DestinationTableName IN  VARCHAR2,
      RejectFilePath            IN  VARCHAR2,
      dtInFormat                 IN  VARCHAR2,
      dtOutFormat              IN  VARCHAR2,
      dtSeparator                IN  VARCHAR2,
      BatchSize                   IN  BINARY_INTEGER)
      RETURN PLS_INTEGER;

END test_util;

CREATE OR REPLACE PACKAGE BODY test_util AS

   FUNCTION LOADIT(

      username                      IN  VARCHAR2,
      password                      IN  VARCHAR2,
      database                       IN  VARCHAR2,
      SourceDataFilePath      IN  VARCHAR2,
      ControlTableName       IN  VARCHAR2,
      DestinationTableName  IN  VARCHAR2,
      RejectFilePath              IN  VARCHAR2,
      dtInFormat                   IN  VARCHAR2,
      dtOutFormat                IN  VARCHAR2,
      dtSeparator                  IN  VARCHAR2,
      BatchSize                     IN  BINARY_INTEGER)
   RETURN        PLS_INTEGER

   IS EXTERNAL
   LIBRARY test_library
   NAME "LoadIt"
   LANGUAGE C
   CALLING STANDARD PASCAL
   PARAMETERS(
       username             STRING,
       password             STRING,
       database              STRING,
       SourceDataFilePath     STRING,
       ControlTableName      STRING,
       DestinationTableName STRING,
       RejectFilePath        STRING,
       dtInFormat             STRING,
       dtOutFormat          STRING,
       dtSeparator            STRING,
       BatchSize               INT)

END test_util;

CREATE OR REPLACE PROCEDURE UseIt
AS

      lusername                    VARCHAR2(50) := 'test';
      lpassword                    VARCHAR2(50) := 'test';
      ldatabase                     VARCHAR2(50) := '';
      lSourceDataFilePath    VARCHAR2(50) := '';
      lControlTableName     VARCHAR2(50) := '';
      lDestinationTableName VARCHAR2(50) := '';
      lRejectFilePath             VARCHAR2(50) := '';
      ldtInFormat                  VARCHAR2(50) := '';
      ldtOutFormat               VARCHAR2(50) := '';
      ldtSeparator                 VARCHAR2(2)  := '/';
      lBatchSize                    BINARY_INTEGER  := 5;
      result                            BINARY_INTEGER;
BEGIN
      result := test_util.LOADIT(lusername,
                                               lpassword,
                                               ldatabase,
                                               lSourceDataFilePath,
                                               lControlTableName,
                                               lDestinationTableName,
                                               lRejectFilePath,
                                               ldtInFormat,
                                               ldtOutFormat,
                                               ldtSeparator,
                                               lBatchSize  );

      DBMS_OUTPUT.PUT_LINE('Result is : ' || result);

      EXCEPTION
      WHEN OTHERS THEN
                   DBMS_OUTPUT.PUT_LINE('INTERNAL ERROR');
END;
/

set serveroutput on;
execute UseIt;
/

-------------------- code ends ------------------
Received on Mon Jul 31 2000 - 00:00:00 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US