Calling a DLL from ORACLE: problem of time!!!

Hi all! Now I'm going to explain this strange subject. I've made a DLL in Delphi that imports a file from a server. Then I've created an Oracle 9iR2 procedure that makes a call to this DLL. Someone can explain me why the first call to this DLL is slower than the successive calls (20 seconds the first, 5 seconds the other)?
Thank you very much!

Yes! It's exact! After post this message I've casually find this (from Oracle Application Developer's Guide - Fundamentals):
How the Database Server Calls External C Procedures
To call an external C procedure, PL/SQL must find the path of the appropriate DLL.
The PL/SQL engine retrieves the path from the data dictionary, based on the library alias from the procedure declaration’s AS LANGUAGE clause. Next, PL/SQL alerts a Listener process which, in turn, spawns a session-specific
agent. By default, this agent is named extproc, although you can specify other names in the listener.ora file. The Listener hands over the connection to the agent, and PL/SQL passes to the agent the name of the DLL, the name of the external procedure, and any parameters.
Then, the agent loads the DLL and runs the external procedure. Also, the agent handles service calls (such as raising an exception) and callbacks to the Oracle
server. Finally, the agent passes to PL/SQL any values returned by the external procedure.
After the external procedure completes, the agent remains active throughout your
Oracle session; when you log off, the agent is killed. Consequently, you incur the
cost of launching the agent only once, no matter how many calls you make. Still, you should call an external procedure only when the computational benefits
outweigh the cost.
Thank you very much!

Similar Messages

  • Calling external dll from oracle 8i pl/sql

    Hi
    I am facing in calling extrenal dll from pl/sql.
    Steps followed by me are
    1.
    create library crc_lib as
    'D:\ORACLE\ORA81\RDBMS\EXTPROC\EXTPROC\my.DLL';
    2.
    CREATE OR REPLACE FUNCTION check_file_crc (f1 char)
    RETURN BOOLEAN AS
    EXTERNAL LIBRARY CRC_LIB
    NAME "Check_File_CRC"
    LANGUAGE C;
    3. CREATE OR REPLACE PROCEDURE CRC_TEST (f1 varchar2) AS
         RetValue varchar2(100);
    BEGIN
         if check_file_crc(f1) then
              RetValue := '0';
         else
              RetValue := '1';
         end if;
         DBMS_OUTPUT.PUT_LINE(RetValue);
    EXCEPTION
         when others then
         DBMS_OUTPUT.PUT_LINE(sqlerrm|| 'I am in exception');
    END;
    4.ET SERVEROUTPUT ON
    SQL> exec crc_test('C:\file.txt');
    ORA-28576: lost RPC connection to external procedure agent
    I am in exception
    I have tsnames.ora as
    EXTPROC_CONNECTION_DATA =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    (CONNECT_DATA =
    (SID = PLSExtProc)
    (PRESENTATION = RO)
    and listner.ora as
    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = PLSExtProc)
    (ORACLE_HOME = D:\Oracle\ora81)
    (PROGRAM = extproc)
    I am unable to resolve problem please help.
    Prashant
    Edited by: prashant13 on Jul 23, 2009 11:27 AM

    See if MOS note      468404.1 proves helpful here (though not meant for your version of Oracle).

  • Call c++ dll from oracle 10g

    can i know how to call a c++ dll from oracle or how to import a c++ dll from oracle
    any help plz??

    You can call dll's via an External Procedure callout, but the dll needs to conform to the C calling standard rather than c++
    http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28424/adfns_externproc.htm#i1006354
    Hope it helps,
    Greg

  • Need to Call VB DLL from Oracle forms 6i.  Please help.

    Dear Friends,
    I am having a DLL which is created in VB. DLL having one function, that function having some IN parameters and it will return Char or Number.
    Please tell me how to call, send IN Parameter and Get out value.
    Advance Thanks.
    Best Regards,
    S.Mariappan.

    I am using ORA_FFI to register the library sucessfully, but getting error "PDE-DFF004 Can't find function clstest.ShowPopup in library C:\temp\testdll.dll", when register the function.
    Has anyone successfully call a VB DLL using ORA_FFI.
    Thanks.
    -- Register the library
    dll_handle := ora_ffi.load_library('C:\temp\','testdll.dll');
    -- Register the function and parameters
    test_handle := ora_ffi.register_function(dll_handle, 'clstest.ShowPopup', ora_ffi.C_STD);
    ora_ffi.register_return(test_handle, ora_ffi.C_INT);

  • Java.lang.ClassCastException when calling webservice stub  from oracle DB

    Hello everyone,
    Because i need to get familliar with calling java webservices from an oracle database, i followed the following example
    (http://www.oracle.com/technology/products/jdev/howtos/10g/WS_DBCallout/DBCalloutWS_HowTo.htm),
    which included installing the SOAP client stack to the database (in the sys schema), grant the right permissions to the SYS user, developing a simple Helloworld webservice with jdeveloper 10.1.2, generating a Webservice stub and deploying a static method of this stub to the database.
    All of this worked just fine, but when i want to call the webservice from oracle by invoking the deployed function, i get a java.lang.ClassCastException.
    The complete stacktrace lists as follows:
    v_Return = foutje: java.lang.ClassCastExceptionnulljava.lang.ClassCastException
         at org.apache.soap.rpc.RPCMessage.serializeParams(RPCMessage.java:323)
         at org.apache.soap.rpc.RPCMessage.marshall(RPCMessage.java:305)
         at org.apache.soap.Body.marshall(Body.java:148)
         at org.apache.soap.Envelope.marshall(Envelope.java:203)
         at org.apache.soap.Envelope.marshall(Envelope.java:161)
         at oracle.soap.transport.http.OracleSOAPHTTPConnection.send(OracleSOAPHTTPConnection.java:664)
         at org.apache.soap.rpc.Call.invoke(Call.java:261)
         at test.HelloWorldServiceStub.sayHello(HelloWorldServiceStub.java:82)
    I debugged the WebServiceStub and noticed that the call.invoke method crashes. This is weird beacuse when i use System.out.println on the parameter is works just fine. so you would think it is a string.
    Moreover, if i invoke the webservice from the endpoint or even when im debugging the stub locally it all works just fine.
    Can someone plzzzzzz help me with this because i spend the whole day looking for an answer and im getting crazy!!!!!
    Thanx al lot guys,
    Kim
    PS or could the problem be in the database instead of the webservice?????????
    Message was edited by:
    user568880
    Message was edited by:
    Kim Zeevaarders

    I think that it's going wrong because i did not install the right SOAP client stack.
    In the HowTo is specified what JAR files are to be loaded in the database (from %JDEV_HOME), but it states that it has only been tested on a Oracle 9.2 database. I'm using Oracle10g. Maybe that's the reason that im getting this classcast exception...
    Can anybody tell me what the right .JAR files are that have to be loaded into database when working with Oracle 10g?
    Many thx in advance!
    Kim

  • How to call labview DLL from C#, passing char, char[], float[], long, short

    Hi,
    I'm having trouble calling labview dll from C# to perform certain function.
    The function supposed to return the values in the float Analysis[] array. However, when I execute it it only returns zero values.
    It seems that some parameters are not properly passed to the dll.
    Below is the function in the header file:
    void __stdcall Optical_Center(char FileDirectory[], long ImagePtr,
        short int Height, short int Width, char ReadFromFile, float Analysis[],
        long lenAnalysis);
    and my corresponding dll import in c#:
    [DllImport(@"SMIA.dll", CharSet = CharSet.Ansi)]
            public static extern void Optical_Center([MarshalAs(UnmanagedType.LPStr)]string FileDirectory, long ImagePtr,
                short Height, short Width,char  ReadFromFile, IntPtr Analysis,
                long lenAnalysis);
    string str = @"C:\SMIA.raw";
    int len = 3;
    long m_lenAnalysis = 3;
    long m_ImagePtr = 0;
    short m_Height = 2464;
    short m_Width = 3280;
    IntPtr m_PtrArray = Marshal.AllocHGlobal(len * Marshal.SizeOf(typeof(float)));
    char m_ReadFromFile = '1';
    Optical_Center(str,m_ImagePtr,m_Height,m_Width,m_ReadFromFile,m_PtrArray,m_lenAnalysis);
    float[] m_Analysis = new float[len];
    Marshal.Copy(m_PtrArray, floatArray,0,len);
    Marshal.FreeHGlobal(m_PtrArray);
    string printstr = "";
    for (int i=0; i<len; i++)
        printstr = printstr + floatArray[i].ToString() + "\n";       
    MessageBox.Show(printstr);
    Appreciate if anyone can help, thanks.
    KL

    I was just about to post the header file of the DLL, when
    I noticed that there's a function called LVDLLStatus.
    This little thingie turned out to be a rather handy tool.
    With that function I found that in the DLL I had a problem
    with another function that prevented the DLL to be correctly
    loaded.
    This other function in the DLL is for generating digital output
    and it worked as it should, when tested from LV.
    Anyway if someone is interested, I got it working by using
    the LoadLibrary and GetProcAddress function, as in the
    source code thatI posted earlier.
    I will investigate what is wrong with that digital output, and
    post into a another thread if I have problems with that.

  • How to call LabVIEW dll from ATL COM dll

    I have tried to call simple LabVIEW 8.6 Dll from win32 test application, class Library.
    I have include LabVIEW generated SharedLib.h file and SharedLib.lib file in the test application which I created as simple win32 console project and also from win32 class Library. I was sucessfully able to call my LabVIEW dll funtion. 
    But when I create ATL COM project and try to add SharedLib.h file and SharedLib.lib file I used to get following erors
    Error 1 error C2733: second C linkage of overloaded function 'StrCatW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 463 
    Error 2 error C2733: second C linkage of overloaded function 'StrCpyW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 464 
    Error 3 error C2733: second C linkage of overloaded function 'StrCpyNW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 465 
    Error 4 error C2733: second C linkage of overloaded function 'StrCmpW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 466 
    Error 5 error C2733: second C linkage of overloaded function 'StrCmpNW' not allowed d:\program files\national instruments\labview 8.6\cintools\extcode.h 467 
    these many errors.
    Will some one explain me how to call LabVIEW dll from ATL COM dll.
    Thanks & Regards,
    Jay

    I also had this problem.  My application is unicode-aware, but I was attempting to link it to a library with primitive C-string arguments.  You could dynamically load the DLL as suggested (more work), modify the header files (really not recommended), or if you are feeling lucky you could try fooling the compiler, as I was successfully able to do in Visual Studio 2010, by steering the preprocessor around those functions (assuming you're not using them, of course -- otherwise this probably wouldn't work):
    // prepare for NI extcode.h inclusion. avoid linker errors for this project.
    #define StrCatW(a,b)     IgnoreLinkError_StrCatW(a,b);
    #define StrCpyW(a,b)     IgnoreLinkError_StrCpyW(a,b);
    #define StrCpyNW(a,b,c)  IgnoreLinkError_StrCpyNW(a,b,c);
    #define StrCmpW(a,b)     IgnoreLinkError_StrCmpW(a,b);
    #define StrCmpNW(a,b,c)  IgnoreLinkError_StrCmpNW(a,b,c);
    // header file for my LabView-built DLL (ASCII single-byte character arguments)
    #include <MyLibraryHeader.h>
    // clean up afterwards, put things back to 'normal'
    #undef StrCatW
    #undef StrCpyW
    #undef StrCpyNW
    #undef StrCmpW
    #undef StrCmpNW

  • Can we call shell script from oracle 9i?

    Hi experts,
    I wanted to know can we call shell script from oracle 9i procedures? If yes,how
    Thanks
    Shaan

    No. I can't think of a way to do this...
    If you want you can use DBMS_SCHEDULER to call OS SHELL scripts within.
    For e.g.
    CREATE PROGRAM
    begin
    dbms_scheduler.create_program
    program_name => 'CHECK_TIME',
    program_type => 'EXECUTABLE',
    program_action => '/opt/oracle/chk_date.sh',
    enabled => TRUE,
    comments => 'Check the Time'
    end;
    CREATE A SHELL SCRIPT
    opt/oracle> cat chk_date.sh
    #!/usr/bin/ksh
    echo "The date is :`date`"
    CREATE SCHEDULE
    begin
    dbms_scheduler.create_schedule
    schedule_name => 'EVERY_30_MINS',
    repeat_interval => 'FREQ=MINUTELY; INTERVAL=30',
    comments => 'Every 30-mins'
    end;
    CREATE JOB
    begin
    dbms_scheduler.create_job
    job_name => 'RUN_CHECK_TIME',
    program_name => 'CHECK_TIME',
    schedule_name => 'EVERY_30_MINS',
    comments => 'Run the program CHECK_TIME every 30 minutes',
    enabled => TRUE
    end;
    MANUALLY RUN A JOB
    exec dbms_scheduler.run_job('RUN_CHECK_TIME');

  • Calling a report from oracle form 10g

    how to call a report from oracle form 10g

    Please see the link:
    http://www.oracle.com/technology/products/forms/pdf/10g/frm10gsrw10g.pdf

  • URGENT!!! calling crystal reports from oracle forms 10g

    Is it possible to call crystal reports from oracle forms 10g?
    Can someone help to answer how, if there is a solusion, to call crystal reports from oracle forms 10g.
    Please provide codes with details showing step by step.
    Thanks

    hi
    try something like this.
    DECLARE
    charWinHandle VARCHAR2(50);
    numWinHandle NUMBER;
    BEGIN Set_Application_Property(Cursor_Style,'BUSY');
    charWinHandle := Get_Item_Property('Control.Rep',Window_Handle);
    numWinHandle := To_Number(charWinHandle);
    :Item('Control.CrystalReport1').OCX.Crystal.Crysta lReport.WindowParentHandle
    := numWinHandle;
    :Item('Control.CrystalReport1').OCX.Crystal.Crysta lReport.WindowState := 2;
    :Item('CONTROL.CRYSTALREPORT1').OCX.Crystal.Crysta lReport.Connect
    := 'DSN=;UID=' || Get_Application_Property(UserName) ||
    ';pwd=' || Get_Application_Property(password) || ';dsq=;';
    Crystal_CrystalCtrl.ReportFileName( :Item('Control.CrystalReport1').interface,
    'C:\Sample_Rep.Rpt' );
    Set_Window_Property( Forms_Mdi_Window, Window_State,Maximize );
    Set_Window_Property( 'MAIN', Window_State, Maximize );
    :reptitle := 'Report Preview Window';
    numWinHandle := Crystal_CrystalCtrl.PrintReport( :Item('Control.CrystalReport1').interface );
    Set_Application_Property(Cursor_Style,'DEFAULT');
    END;NOTE: Change the report name and path according to your required file name and path in
    the "Crystal_CrystalCtrl.ReportFileName" method call. Also, the connection string shown
    assumes that you will use the current USER and PASSWORD for the Form.
    - To make the above Form generic so that you can run any Crystal report from it, then create
    a parameter for the report name and pass it to the Form using CALL_FORM from any other Form.
    Then just replace the file name with the passed parameter.
    -. Run the Form
    If its correct/helpful please mark it thanks.
    sarah
    Edited by: S@R@h on Nov 27, 2009 6:33 AM

  • Calling web service from oracle application framework r12

    Hi Techies
    Is anybody know How to call web service from oracle application framework r12(step by step procedure),because i searched in net but i could not understand that one
    Thanks
    Dillibabu B
    Edited by: 962005 on 28 Sep, 2012 12:11 AM

    Hi,
    Check below links:
    http://oracle.anilpassi.com/oa-framework-with-captcha-webservice.html
    http://oracle.anilpassi.com/integrate-oa-framework-with-web-service.html
    https://blogs.oracle.com/ebusinesssuiteintegration/entry/r121_-invokingweb_service_fr
    --Sushant                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • Calling OAF Page from Oracle forms

    Hi All,
    Is it possible to call an Oracle Forms from OAF page?
    I need to call a OAF page EAM material cost screen from oracle form using personalization.
    Please any one put on some lights on this issue.
    Thanks in Advance,
    Ramesh reddy
    Edited by: user642447 on May 13, 2011 4:33 AM

    Ramesh,
    yes, its possible to call oaf page from oracle forms.
    This has been specified step by step in Developer Guide. Refer it for more.
    Regards,
    Gyan

  • Calling LV DLL from VB

    I have a vi that initializes, measures, and releases
    an OSA instrument. I want to call this routine from VB.
    I used Standard calling convention when making DLL from LV.
    Here is my VB declaration:
    Private Declare Sub OSAMeasurement Lib "C:\ADE\OSAMeasurement.dll" Alias "OSADFBMeasurement" _
    (ByVal GPIB As Long, _
    ByVal Serial_Number As String, _
    ByVal FileName As String, _
    ByVal File_Path As String, _
    ByVal Start_Wavelength_nm As Double, _
    ByVal Stop_Wavelength_nm As Double, _
    ByVal Level_Scale_dB As Double, _
    ByVal Res_nm As Double, _
    ByVal Peak_Wavelength As Double, _
    ByVal Peak_Level As Double, _
    ByVal SMSR As Double, _
    ByVal FWHM As Double, _
    ByVal Mode_Offset As Double, _
    ByRef Level_Array() As Double, _
    ByRef Wa
    velength_Array() As Double, _
    ByVal Array_Length As Long)
    Here is my VB call:
    Call OSAMeasurement(Form1.OSA.PrimaryAddress, _
    (strOXM & Form1!txtOPMNumber), _
    (CStr(CInt(dblSetVoltage)) & "v_Scan.txt"), _
    (txtDataStoragePath & strOXM & " " & Form1!txtOPMNumber & "\"), _
    1520, 1620, 5, 1, Peak_Wavelength, Peak_Level, _
    SMSR, FWHM, Mode_Offset, _
    Level_Array, Wavelength_Array, 1001)
    I get RunTime Error "49"
    Bad DLL calling convention
    What is wrong?
    Any suggestions/comments?
    Attachments:
    OSA.zip ‏703 KB

    Basically what i want to do is to call the microchip's dll called "mpusbapi.dll" from VB6. This dll is written in C++. This dll has some basic functions of usb like MPUSBRead() , MPUSBWrite , MPUSBOpen() etc.
    I have made a usb data acquisition card and i want to communicate with this card by means of VB 6. Please tell me or send a tutorial of calling a DLL from VB 6.
    Any help greatly appreciated
    Attachments:
    _mpusbapi.cpp ‏42 KB
    _mpusbapi.h ‏19 KB

  • Calling a dll from VB

    Hi all
    I have two questions
    1) I know about the visual Basic 6 but what is measurement studio for visual Basic 6?
    2) Can anyone tell me how to call a dll from Visual Basic 6? Any example for this ?
    Any help greatly appreciated :-)

    Basically what i want to do is to call the microchip's dll called "mpusbapi.dll" from VB6. This dll is written in C++. This dll has some basic functions of usb like MPUSBRead() , MPUSBWrite , MPUSBOpen() etc.
    I have made a usb data acquisition card and i want to communicate with this card by means of VB 6. Please tell me or send a tutorial of calling a DLL from VB 6.
    Any help greatly appreciated
    Attachments:
    _mpusbapi.cpp ‏42 KB
    _mpusbapi.h ‏19 KB

  • How to call web services from oracle database 10g

    Hi all ,
    How can i call web services from oracle database 10g ?
    thanks ...

    abdou123 wrote:
    but how can i get complex result
    for example
    i pass input parameter like National Id Number
    and get the person details ( name , age , date of birth , ............ ) .Basic approach to web services using UTL_HTTP explained in {message:id=10448611}.
    An example of using a pipeline table function as a data transformation process (turning web data into rows and columns) in {message:id=10158148}.

Maybe you are looking for