Problem call Dll C from procedure

Hi all, I have dll write by C and with function A(String[] param). I want call this is function from procedure on Oracle. Please help me step to step do it.
Thank you so much.

MobizCOM jsc wrote:
The pszParams is an array of pointers to 4 strings (char **), and it is an IN/OUT parameter. It means we need to pass an array of string to external function in the dll, then the external update the array as an output parameter. After return to PL/SQL, we need to extract the updated values in the array to continue process.
In my understanding, the most appropriate datatype with this in PL/SQL is "TABLE OF VARCHAR2". But it is a kind of collection. Does Oracle support to pass this datatype to external function?No.
It is a mistake in thinking that an Oracle array will be a byte copy of how C represents an array in memory.
We have tried to create a dll with simple function, simple parameters and it works. It seems that our configure for listener.ora are correctly.Correct. Which means it is now much simpler to focus on the actual challenge - passing data between the PL engine and a DLL using compatible data structures.
I have done some basic testing with array types and PL and C do not seem to match at all in this respect. Which meant I defaulted to using scalar data types and variables only.
You can point your browser to [http://tahiti.oracle.com|http://tahiti.oracle.com] and do some research yourself. There should be documentation describing the compatibility between PL and C data types.
You can also use Pro*C to see what Oracle's precompiler does. It does a 2 step compilation - so Pro*C compiles the Pro*C code (C + SQL) into C source and then that gets compiled with the normal C compiler. Peeking at the C source code generated by Pro*C may provide better insights in how SQL and PL/SQL data types and mapped to C data types and vice versa.
As for performance - in this case optimal performance is staying inside the PL engine and not stepping (context switching) to an external process interfacing with an external DLL. Therefore it would be best to replicate the functionality provided by that DLL into PL/SQL as far as possible.

Similar Messages

  • Calling  dll method from oracle forms

    Hi,
    This is my first post in this forum. I don't know whether this is the right place to post this topic here.
    i wana call DLL method from the button click event of my form.
    I new to oracle development any help will be greatly appreciated.

    Calling DLL using form 6i
    Regards,

  • Call DLL function from JAVA

    HI!
    What's the best way (and simple) to call DLL function from JAVA.
    DLL function (developed in C) has two input parameters (string) and return an integer.
    Could you help with an example?
    Thanks a lot.

    Do a google search for 'JNI tutorial' and it will turn up hundreds of examples.

  • Problem calling a report from Forms

    Hi,
    I am currently trying to upgrade our Forms and Reports from 6.0 to 10g. I created a simple form and a simple report and I called the report from the form (passing no parameters) and report was generated fine. Now I'm looking at one of our existing forms and I've complied them in 10g. This time I'm passing a parameter and the report is failing. If I run the report on its own with the same parameter it works fine. I am using the Run_report_object builtin.
    The error I get is the 41214:Unable to run report. The weird thing about this is if I pass in a bogus parameter (not valid in the database), the report will execute fine and I will get a page saying that No Data was Found (text displays when nothing was returned from the query). However, whenever I pass in a good parameter (Data should be returned), the report do not execute and I get the error. So, I updated the database to have the bogus parameter and then when I passed in the bogus parameter again, this time it failed. So it looks like that when data is coming back from the query in the report, I get the error. I'm connected to the same database that was used in the simple example stated above that returned data.
    Does anyone have any idea what could be causing this? Let me know if more information is needed.
    Thanks,
    Karen

    You can check the reports queue for error messages to see what the error actually is.
    http://server:port/reports/rwservlet/showjobs?server=repsever

  • Problem Calling BPEL process from ibot alert

    I am using following tutorial for calling java program from ibot.
    http://oraclebizint.wordpress.com/2007/12/17/oracle-bi-ee-101332-calling-java-scripts-and-java-classes-from-ibots/
    The program is getting compiled and at the time of alert it is showing no error at OracleBI home\server\Log\iBots\NQiBot.err. which can be assumed that it has been executed and initiated the BPEL process but no instance is shown in the BPEL Console.
    so pls help us for it
    Thanks in advance..

    Hi,
    thanks for reply, yes i have all dependency jars bundled in the main jar. When i try executing my java file then it is sucessfully triggering BPEL process. but When i am trying to execute the same java file from ibot. Then it is not executing by ibot.
    then i trying to throw new SchedulerJobException(1, 1, e.getMessage()); in the catch block in my java program.
    then the Error occurs in OracleBI\server\Log\iBots\NQiBot-3-64.0.err
    that is
    +++ ThreadID: 8f0 : 2008-02-20 16:42:12.331
    java.lang.ExceptionInInitializerError
         at org.apache.axis.utils.Messages.<clinit>(Messages.java:36)
         at org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:206)
         at org.apache.axis.configuration.EngineConfigurationFactoryFinder.access$200(EngineConfigurationFactoryFinder.java:46)
         at org.apache.axis.configuration.EngineConfigurationFactoryFinder$1.run(EngineConfigurationFactoryFinder.java:128)
         at java.security.AccessController.doPrivileged(Native Method)
         at org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:113)
         at org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:160)
         at org.apache.axis.client.Service.getEngineConfiguration(Service.java:813)
         at org.apache.axis.client.Service.getAxisClient(Service.java:104)
         at org.apache.axis.client.Service.<init>(Service.java:123)
         at org.apache.axis.client.ServiceFactory.createService(ServiceFactory.java:214)
         at callmybpel.Main.callThroughAxis(Main.java:44)
         at callmybpel.Main.run(Main.java:88)
         at com.siebel.analytics.scheduler.javahostrpccalls.RpcSchedulerJob.processMessageInternal(RpcSchedulerJob.java:75)
         at com.siebel.analytics.javahost.AbstractRpcCall.processMessage(AbstractRpcCall.java:94)
         at com.siebel.analytics.javahost.MessageProcessorImpl.processMessage(MessageProcessorImpl.java:175)
         at com.siebel.analytics.javahost.Listener$Job.run(Listener.java:223)
         at com.siebel.analytics.javahost.standalone.SAJobManagerImpl.threadMain(SAJobManagerImpl.java:205)
         at com.siebel.analytics.javahost.standalone.SAJobManagerImpl$1.run(SAJobManagerImpl.java:153)
         at java.lang.Thread.run(Thread.java:619)
    Caused by: java.util.MissingResourceException: Cannot find resource 'org.apache.axis.i18n.resource'
         at org.apache.axis.i18n.ProjectResourceBundle.getBundle(ProjectResourceBundle.java:288)
         at org.apache.axis.i18n.MessagesConstants.<clinit>(MessagesConstants.java:32)
         ... 20 more
    One more thing I am using axis jar files from OracleBI folder(OracleBI\web\javahost\lib).
    Pls help us,
    Thanks in advance
    Message was edited by:
    user620711

  • Problem calling oracle SP from Java

    Hi I am trying to call an oracle SP from Java program and getting the error code 17060. Below is my code:
    Oracle SP:
    create or replace type item as object (itemnumber varchar2(9),itemdesc varchar2(35));
    create or replace type uom as object (prodUOM varchar2(18), ratioDen NUMBER(1));
    CREATE OR REPLACE TYPE uom_Arr aS VARRAY(100) OF uom;
    create or replace package test_pkg_xml is
    procedure test_sp_xml (item_rec item,
    uom_tbl uom_arr);
    end test_pkg_xml;
    create or replace package body test_pkg_xml is
    procedure test_sp_xml (item_rec item,
    uom_tbl uom_arr)
    is
    begin
    null;
    end;
    end test_pkg_xml;
    Java Code
    public class item implements SQLData {
    private String sql_type;
    public String itemnumber ;
    public String itemdesc ;
    public String getSQLTypeName() throws SQLException { return sql_type; }
    public void readSQL(SQLInput stream, String typeName)throws SQLException
    sql_type = typeName;
    itemnumber = stream.readString();
    itemdesc = stream.readString();
    public void writeSQL(SQLOutput stream) throws SQLException
    System.out.println("in write sql");
    stream.writeString (itemnumber);
    stream.writeString (itemdesc);
    package com.tgt.dstb.dwm.dstbtowm.dao;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import java.sql.Connection;
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Types;
    import java.sql.SQLException;
    import java.util.Map;
    import java.util.Hashtable;
    public class TestDOM
    public static void test(Connection conn) throws Exception
    item obj1 = new item();
    Obj2 obj2 = new Obj2();
    Obj2[] obj3 = {new Obj2(), new Obj2()};
    String sql = "call " + "test_pkg_xml.test_sp_xml(?,?)";
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder parser = factory.newDocumentBuilder();
    Document document = parser.parse( "item.xml" );
    Element itemMaster = document.getDocumentElement();
    NodeList itemNumber = itemMaster.getElementsByTagName("itemNumber");
    NodeList itemDesc = itemMaster.getElementsByTagName("itemDesc");
    System.out.println("Item = ");
    String itmname = DOMUtil.getSimpleElementText( itemMaster, "itemNumber" );
    String itmdesc = DOMUtil.getSimpleElementText( itemMaster, "itemDesc" );
    obj1.itemnumber = itmname;
    obj1.itemdesc = itmdesc;
    System.out.println("itmname = " + obj1.itemnumber );
    System.out.println("itmdesc = " + obj1.itemdesc );
    NodeList uoms = itemMaster.getElementsByTagName("uoms");
    NodeList uom = itemMaster.getElementsByTagName("uom");
    System.out.println("uom = ");
    for( int i=0; i<uom.getLength(); i++ ) {
    String itmprodUOM = DOMUtil.getSimpleElementText(
    (Element)uom.item(i),"prodUOM" );
    obj3.prodUOM = itmprodUOM;
    String itmratioDen = DOMUtil.getSimpleElementText(
    (Element)uom.item(i), "ratioDen" );
    obj3[i].ratioDen = itmratioDen;
    System.out.println( " "+ itmprodUOM +" ("+itmratioDen+")" );
    try
    Hashtable map = new Hashtable();
    map.put ("item", Class.forName ("com.tgt.dstb.dwm.dstbtowm.dao.item"));
    conn.setTypeMap(map);
    System.out.println("here 11111 ");
    CallableStatement stmt = conn.prepareCall("call test_pkg_xml.test_sp_xml(?,?)");
    System.out.println("here 2 ");
    stmt.setObject(1,obj1);
    System.out.println("here 3 ");
    stmt.setObject(2,obj3);
    System.out.println("here 4 ");
    stmt.execute();
    System.out.println("here 5 ");
    }catch (SQLException e)
    System.out.println("exception :"+e.getErrorCode());
    Can you please point out where I might be going wrong with the code? Any help would be greatly appreciated.
    PS : I am getting the error 17060 after the stmt : System.out.println("here 2 ");
    Thanks,
    Nitin

    Avi, I changed my code to:
    package com.tgt.dstb.dwm.dstbtowm.dao;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import java.sql.Connection;
    //import java.sql.CallableStatement;
    import java.sql.*;
    //import java.util.Map;
    //import java.util.Hashtable;
    import oracle.sql.ArrayDescriptor;
    import oracle.sql.*;
    import oracle.jdbc.*;
    public class TestDOM
    public static void test(Connection conn) throws Exception
         item obj1 = new item();
         Obj2 obj2 = new Obj2();
         Obj2[] obj3 = {new Obj2(), new Obj2()};
         String sql = " call test_pkg_xml.test_sp_xml(?,?)";
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder parser = factory.newDocumentBuilder();
    Document document = parser.parse( "item.xml" );
    Element itemMaster = document.getDocumentElement();
    NodeList itemNumber = itemMaster.getElementsByTagName("itemNumber");
    NodeList itemDesc = itemMaster.getElementsByTagName("itemDesc");
    System.out.println("Item = ");
    String itmname = DOMUtil.getSimpleElementText( itemMaster, "itemNumber" );
    String itmdesc = DOMUtil.getSimpleElementText( itemMaster, "itemDesc" );
    obj1.itemnumber = itmname;
    obj1.itemdesc = itmdesc;
    System.out.println("itmname = " + obj1.itemnumber );
    System.out.println("itmdesc = " + obj1.itemdesc );
    NodeList uoms = itemMaster.getElementsByTagName("uoms");
    NodeList uom = itemMaster.getElementsByTagName("uom");
    System.out.println("uom = ");
    for( int i=0; i<uom.getLength(); i++ ) {
    String itmprodUOM = DOMUtil.getSimpleElementText(
    (Element)uom.item(i),"prodUOM" );
    obj3.prodUOM = itmprodUOM;
    String itmratioDen = DOMUtil.getSimpleElementText(
    (Element)uom.item(i), "ratioDen" );
    obj3[i].ratioDen = Integer.parseInt(itmratioDen);
    System.out.println( " "+ itmprodUOM +" ("+itmratioDen+")" );
    try
    System.out.println("here 1 ");
    OracleCallableStatement stmt = (OracleCallableStatement)
    conn.prepareCall("BEGIN test_pkg_xml.test_sp_xml(?,?); END;");
    System.out.println("here 1.1 ");
    System.out.println("here 1.2 ");
    ArrayDescriptor desc1 = ArrayDescriptor.createDescriptor("UOM_ARR", conn);
         ARRAY array_to_pass1 = new ARRAY(desc1, conn, obj3);
    System.out.println("here 2 ");
    stmt.setObject(1,obj1,OracleTypes.STRUCT);
    System.out.println("here 3 ");
    stmt.setArray(2,array_to_pass1);
    System.out.println("here 4 ");
    stmt.execute();
    System.out.println("here 5 ");
         }catch (Exception e)
              e.printStackTrace();
    However, now I the code is printing
    "here 1 "
    and then giving
    "[1/4/07 11:37:28:133 CST] 00000036 SystemErr R java.lang.ClassCastException: com.ibm.ws.rsadapter.jdbc.WSJdbcCallableStatement"
    at "OracleCallableStatement stmt = (OracleCallableStatement)
    conn.prepareCall("BEGIN test_pkg_xml.test_sp_xml(?,?); END;");"
    statement.
    I am using Rational App Developer Version 6.0.1 and getting a connection using
    the below code:
              DataSource     dataSource=null ;
              Context jndiContext = new InitialContext();
              dataSource =
    (DataSource)jndiContext.lookup("java:comp/env/jdbc/DWM3DDS");
              Connection wsConn = dataSource.getConnection();
    Looks like this exception occurs when I am casting java.sql.Connection object to OracleCallableStatement. Do you have any idea why this might be occuring? Have you encountered this kind of a problem?
    Thanks,
    Nitin

  • Calling a function from procedure

    Please someone let me know if I'm going in the right direction or am I making it too difficult for myself. I'm only using the exam guide on programming units which assumes the reader already has a firm grasp on the material. I am entry level and need guidance.
    The problem:
    write a calling procedure and a function that will accomplish the following: The calling procedure will find all employees on the EMP table who's hire date is between Jan 01 and Apr 30, 1981. The function will then a 5% pay raise for each of the selected employees. The calling procedure will then display the employee number, employee name, and the new salary for each of the selected employees. Logically, then, the calling procedure will find the first employee within the date range, pass the employee current salary to the function, the function will compute the 5% pay raise and return the new salary to the calling procedure. The calling procedure will then display the required results..
    //Function
    create or replace function func_calc_emp_raise
    (p_sal IN OUT NUMBER)
    RETURN NUMBER
    IS
    BEGIN
    p_sal := p_sal * 1.05;
    RETURN p_sal;
    END;
    //procedure
    CREATE OR REPLACE PROCEDURE PROC_EMP_RAISES
    (p_empno VARCHAR2,
    p_ename VARCHAR2,
    p_sal NUMBER)
    IS
    v_empno emp.empno%type;
    v_ename emp.ename%type;
    v_sal emp.sal%type;
    CURSOR cur_raise
    IS
    SELECT empno, ename, sal
    FROM emp
    where hiredate between
    TO_DATE('JAN-01-1981','MON-DD-YYYY') and
    TO_DATE('APR-30-1981','MON-DD-YYYY');
    BEGIN
    open cur_raise;
    LOOP
    FETCH cur_raise INTO v_empno, v_ename, v_sal;
    EXIT WHEN (cur_raise%NOTFOUND);
    v_sal:= func_calc_emp_raise(v_sal);
    END LOOP;
    close cur_raise;
    end proc_emp_raises;
    Both compile correctly but how do I get output?
    Dee

    I am not getting the error that you are. Did you create the function as originally posted? What version of Oracle are you using? I am using Oracle 8.1.7. Although it seems to tolerate the parameter passed to the function as IN OUT and allows modifictaion of the p_sal parameter, earlier versions of Oracle may require that it only be IN and that you not modify the input parameter. I have listed an alternate function below:
    SQL> CREATE OR REPLACE FUNCTION func_calc_emp_raise
      2    (p_sal IN NUMBER)
      3    RETURN      NUMBER
      4  IS
      5  BEGIN
      6    RETURN p_sal * 1.05;
      7  END func_calc_emp_raise;
      8  /
    Function created.
    SQL> SHOW ERRORS
    No errors.
    SQL> -- Procedure:
    SQL> CREATE OR REPLACE PROCEDURE proc_emp_raises
      2  AS
      3  BEGIN
      4    FOR rec IN
      5        (SELECT empno, ename, sal
      6         FROM      emp
      7         WHERE  hiredate BETWEEN TO_DATE ('JAN-01-1981','MON-DD-YYYY')
      8                   AND       TO_DATE('APR-30-1981','MON-DD-YYYY'))
      9    LOOP
    10        DBMS_OUTPUT.PUT_LINE
    11          (rec.empno              || ' '
    12           || RPAD (rec.ename, 20)
    13           || ' '
    14           || TO_CHAR (func_calc_emp_raise (rec.sal)));
    15    END LOOP;
    16  END proc_emp_raises;
    17  /
    Procedure created.
    SQL> SHOW ERRORS
    No errors.
    SQL> -- Execution:
    SQL> SET SERVEROUTPUT ON SIZE 500000
    SQL> EXECUTE proc_emp_raises
    7499 ALLEN                1680                                                 
    7521 WARD                 1312.5                                               
    7566 JONES                3123.75                                              
    PL/SQL procedure successfully completed.

  • Problem calling java method from c

    Hi ,
    I'm trying to call a java method from a C program. it gives no error during compilation as well as building the application. but when i tried to create the JVM by running my application it pops up the message "The application failed to start because jvm.dll was not found. Re-installing the application may fix the problem." I tried out setting all the environment variables to include the jvm.dll(PATH set to c:\j2sdk1.4.2_05\bin;c:\j2sdk1.4.2_05\jre\bin). Still got the same message. Then i re-installed java platform once more. Even now i get the same error. I have more than one jvm.dll at locations jre\bin\client and server, oracle has some jvm.dll . Will that be a problem? if so can i remove those? which of them should be removed and how?
    The code i'm using is
    #include <stdio.h>
    #include <jni.h>
    #include <windows.h>
    //#pragma comment (lib,"C:\\j2sdk1.4.2_05\\lib\\jvm.lib")
    JavaVM jvm; / Pointer to a Java VM */
    JNIEnv env; / Pointer to native method interface */
    JDK1_1InitArgs vm_args; /* JDK 1.1 VM initialization requirements */
    int verbose = 1; /* Debugging flag */
    FARPROC JNU_FindCreateJavaVM(char *vmlibpath)
    HINSTANCE hVM = LoadLibrary("jre\\bin\\server\\jvm.dll");
    if (hVM == NULL)
    return NULL;
    return GetProcAddress(hVM, "JNI_CreateJavaVM");
    void main(int argc, char **argv )
    JavaVM jvm = (JavaVM )0;
    JNIEnv env = (JNIEnv )0;
    JavaVMInitArgs vm_args;
    jclass cls;
    jmethodID mid;
    jint res;
    FARPROC pfnCreateVM;
    JavaVMOption options[4];
    // jint (__stdcall pfnCreateVM)(JavaVM *pvm, void **penv, void *args) = NULL;
    options[0].optionString = "-Djava.compiler=NONE"; /* disable JIT */
    options[1].optionString = "-Djava.class.path=c:/j2sdk1.4.2_05/jre/lib/rt.jar"; /* user classes */
    options[2].optionString = "-Djava.library.path=lib"; /* set native library path */
    options[3].optionString = "-verbose:jni"; /* print JNI-related messages */
    /* Setup the environment */
    vm_args.version = JNI_VERSION_1_4;
    vm_args.options = options;
    vm_args.nOptions = 4;
    vm_args.ignoreUnrecognized = 1;
    JNI_GetDefaultJavaVMInitArgs ( &vm_args );
    pfnCreateVM = JNU_FindCreateJavaVM("jre\\bin\\server\\jvm.dll");
    res = (*pfnCreateVM)(&jvm,(void **) &env, &vm_args );
    // res = JNI_CreateJavaVM(&jvm,(void **) &env, &vm_args );
    /* Find the class we want to load */
    cls = (*env)->FindClass( env, "InstantiatedFromC" );
    if ( verbose )
    printf ( "Class: %x" , cls );
    /*jvm->DestroyJavaVM( );*/
    Could anyone help me solve this problem as early as possible, bcoz i'm in an urge to complete the project.
    Thanks in advance.
    Usha.

    You either have to add to the system path of where is your jvm.dll is located or explicitly link to jvm.dll call GetProcAddress to obtain the address of an exported function in the DLL.

  • Calling DLL method from ABAP

    Hi there,
    Is there any way of IMPORTING return variables from DLL methods? The CALL METHOD of mydll only provides an option of EXPORTING variables from to a DLL method.
    For eg. consider the following method:
    Result = dll.FileOpen(hWnd,DocName,Flag)
    This method opens a popup box that displays a list of files and allows the user for selecting a file, the name of which is returned in the DocName variable.
    Any help will be appreciated.
    John

    Calling DLL using form 6i
    Regards,

  • Problem calling function inside a procedure

    I have a procedure that simply calls a function, but I'm not sure how to declare it.
    When I run my script oracle returns an error:
    CREATE OR REPLACE PROCEDURE pr_entrada_close(
         var_id_entrada int)
    AS
    BEGIN
         fn_criaJobAnalise(var_id_entrada);
    END;
    ERROR at line 5: PL/SQL: Statement ignored3. AS
    4. BEGIN
    5.      fn_criaJobAnalise(var_id_entrada);
    6. END;

    As far as I know, that structure worked in at least 8.0 and possibly earlier. I actually saw something similar in production code on that version of Oracle. The actual function took several parameters, and using those paramters did a series of statements along the lines of:
    BEGIN
       SELECT 1 INTO l_var
       FROM table1
       WHERE <predicates>
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
          RAISE APPLICATION_ERROR (-20001, 'Error');
       WHEN TOO_MANY_ROWS THEN
          RAISE APPLICATION_ERROR (-20002, 'Error');
    END;
    BEGIN
       SELECT 1 INTO l_var
       FROM table2
       WHERE <predicates>
    EXCEPTION
       WHEN NO_DATA_FOUND THEN
          RAISE APPLICATION_ERROR (-20003, 'Error');
       WHEN TOO_MANY_ROWS THEN
          RAISE APPLICATION_ERROR (-20004, 'Error');
    END;
    -- About 4 or 5 more tables checked
    RETURN 1;and the caller looked kind of like:
    DECLARE
       NO_ROWS_TABLE1 EXCEPTION;
       DUP_ROWS_TABLE1 EXCEPTION;
       NO_ROWS_TABLE2 EXCEPTION;
       DUP_ROWS_TABLE2 EXCEPTION;
       PRAGMA EXCEPTION_INIT (NO_ROWS_TABLE1, -20001);
       PRAGMA EXCEPTION_INIT (DUP_ROWS_TABLE1, -20002);
       PRAGMA EXCEPTION_INIT (NO_ROWS_TABLE2, -20003);
       PRAGMA EXCEPTION_INIT (DUP_ROWS_TABLE2, -20004);
       l_v NUMBER;
    BEGIN
       BEGIN
          l_v := test_tables(<parameters>);
       EXCEPTION
          WHEN NO_ROWS_TABLE1 THEN
             <do something about it>
          WHEN DUP_ROWS_TABLE1 THEN
             <do something about it>
          WHEN NO_ROWS_TABLE2 THEN
             <do something about it>
          WHEN DUP_ROWS_TABLE2 THEN
             <do something about it>
       END;
       <Continue normal processing>
    END;and, yes, <Continue normal processing> occasionally failed for mysterious reasons when more than one of the checks would have failed had the function got to them, and l_v was never ever used.
    This was one of the clevererbits of code in that app.
    John

  • Problems calling a method from a different class

    Like many programmers, I'm having a go at making my own chat room. All has been going well so far, however I am having trouble calling the method which connects the client to the server, from the method which actually starts the server.
    The method for starting the server:
    public static void serverStart () throws IOException {
            new Thread () {
            public void run() {
                try {
                    ServerSocket serverSock = new ServerSocket (client.serverPort);
                while (true) {
                    Socket serverClient = serverSock.accept ();
                    ChatHandler handler = new ChatHandler(serverClient);
                    handler.start ();
                } catch (IOException ex) {     
                    connectTo.handleIOException(ex);     
            }.start();
            try {
                connectTo.start();
            } catch (IOException ex) {
                connectTo.handleIOException(ex);
        }The part of interest is the "connectTo.start()" line, as this is the one which calls a method in the class connectToMethod which tells the client to connect to this newly started server. Now for the client connection code:
    public synchronized void start () throws IOException {
          if (listener == null) {
              Socket socket = new Socket (client.serverAddr, client.serverPort);
              try {
                  dataIn = new DataInputStream
                          (new BufferedInputStream (socket.getInputStream ()));
                  dataOut = new DataOutputStream
                          (new BufferedOutputStream (socket.getOutputStream ()));
              } catch (IOException ex) {
              socket.close ();
              throw ex;
          listener = new Thread (this);
          listener.start ();
      }Now when the server starts, it should automatically start the connection method "start()" and connect to itself. However I am getting a NullPointerException error at the line "connectTo.start();" from the server code. The server and connection client actually work separately, just not when I try to connect from the server itself. I have tried a few ways of getting around this problem, all without success. If anyone could give some input on what might be wrong, or a possible way to fix it, I'd be very grateful.

    Sorry, connectTo comes from:
    connectToMethod connectTo = new
    connectToMethod();
    That doesn't necessarily mean this variable reference is the same one as in the code where the NullPointerException was thrown though.
    Or the exception was thrown inside the start() method. The runtime isn't lying to you. You have a null reference (pointer) where it says you do.

  • Problem calling a report from a form

    Hello,
    i thought about 5 hours what causes this. but i didn't found a solution..
    [http://img188.imageshack.us/i/67205607.jpg/]
    in when-button-pressed i have:
    DECLARE
    report_id REPORT_OBJECT;
    report_job_id VARCHAR2(200);
    rep_status VARCHAR2(200);
    JOB_NUMBER number;
    server_name VARCHAR2(200) := 'roger';
    BEGIN
    /* Check to see if forms application is WEB deployed */
    IF get_application_property(user_interface) = 'WEB' THEN
         report_id:= FIND_REPORT_OBJECT('report104');
         /* Set Report parameters given WEB deployment */
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_SERVER , server_name);
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESTYPE,CACHE);
         /* DESFORMAT could be HTML, HTMLCSS or PDF here*/
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESFORMAT,'PDF');
         /* Run the report */
         report_job_id := RUN_REPORT_OBJECT(report_id);
         /* Check the report status */
         rep_status:=REPORT_OBJECT_STATUS(report_job_id);
         WHILE rep_status IN ('RUNNING','OPENING_REPORT','ENQUEUED')
         LOOP
         rep_status := report_object_status(report_job_id);
         END LOOP;
         IF rep_status='FINISHED' THEN
         message('REPORT WAS CORRECTLY RUN');
         /* Display the report output in the client browser */
         JOB_NUMBER := length(server_name) + 2;
         WEB.SHOW_DOCUMENT ('/reports/rwservlet/getjobid'||substr(report_job_id,JOB_NUMBER)||'?server=' || server_name ||'&param_cls='||to_number(:control.lst_clase));
         /* If report has failed display message to user */
         ELSE
              message('REPORT FAILED WITH STATUS: '||rep_status, no_acknowledge);
         END IF;
    ELSE
         /* Else if forms application is Client-Server deployed */
         /* Set Report parameters given Client-Server deployment */
         report_id:= FIND_REPORT_OBJECT('report104');
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_SERVER ,'');
         /* Report to be executed via Reports Background Engine, not the 'new' Reports Multi-Tier Server */
         /* Destype SCREEN or PREVIEW can be used here */
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESTYPE,SCREEN);
         /* Run the report */
         report_job_id := RUN_REPORT_OBJECT(report_id);
    END IF;
    END;report104 is the name of the repord added in the Reports node (in Forms).
    in the left window from the image, i checked for the value of parameter param_cls, and it's ok (16).
    when i run the report from the Reports, i see all the repors (that table), but when i run from forms, i got just the headers of the table, the rest is invisible. i don't know why happens this..
    :control.lst_clase returns a char, so i convert that char to a number, and that's the parameter passed from Forms.
    Please help me..
    edit: i saw in Reports that there are two buttons: Run Web Layout and Run Paper Layout. from the Forms, i wanna run the web layout
    Thanks
    Edited by: Roger22 on 22.06.2009 18:24

    finally solved. there was a problem at passing parameters
    this is the code
    DECLARE
    report_id REPORT_OBJECT;
    report_job_id VARCHAR2(200);
    rep_status VARCHAR2(200);
    JOB_NUMBER number;
    server_name VARCHAR2(200) := 'roger';
    rep_url varchar2(500);
    BEGIN
    /* Check to see if forms application is WEB deployed */
    IF get_application_property(user_interface) = 'WEB' THEN
         report_id:= FIND_REPORT_OBJECT('report107');
         /* Set Report parameters given WEB deployment */
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_SERVER , server_name);
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESTYPE,CACHE);
         /* DESFORMAT could be HTML, HTMLCSS or PDF here*/
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESFORMAT,'HTML');
         /* Run the report */
         report_job_id := RUN_REPORT_OBJECT(report_id);
         /* Check the report status */
         rep_status:=REPORT_OBJECT_STATUS(report_job_id);
         WHILE rep_status IN ('RUNNING','OPENING_REPORT','ENQUEUED')
         LOOP
         rep_status := report_object_status(report_job_id);
         END LOOP;
         IF rep_status='FINISHED' THEN
         message('REPORT WAS CORRECTLY RUN');
         /* Display the report output in the client browser */
         JOB_NUMBER := length(server_name) + 2;
         rep_url:='/reports/rwservlet?report=D:\Oracle\product\10.2.0\DevSuiteHome_1\reports\ORAR.jsp'
         ||'&userid='||get_application_property(username)||'/'||get_application_property(password)||'@'||get_application_property(connect_string)
         ||'&desformat=htmlcss'
         ||'&destype=cache'
         ||'&paramform=yes'
         ||'&getjobid'||substr(report_job_id,JOB_NUMBER)
         ||'&param_cls='||to_char(:control.lst_clase)
         ||'&param_ansc='||to_char(:control.lst_an)
         ||'&param_sem='||to_char(:control.text_item26);
         WEB.SHOW_DOCUMENT (rep_url,'_blank');
         /* If report has failed display message to user */
         ELSE
              message('REPORT FAILED WITH STATUS: '||rep_status, no_acknowledge);
         END IF;
    ELSE
         /* Else if forms application is Client-Server deployed */
         /* Set Report parameters given Client-Server deployment */
         report_id:= FIND_REPORT_OBJECT('report107');
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_SERVER ,'');
         /* Report to be executed via Reports Background Engine, not the 'new' Reports Multi-Tier Server */
         /* Destype SCREEN or PREVIEW can be used here */
         SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESTYPE,SCREEN);
         /* Run the report */
         report_job_id := RUN_REPORT_OBJECT(report_id);
    END IF;
    END;but the report is running in Paper Layout. i wanna run in Web Layout (in Reports Builder there are two buttons, Paper Layout and Web Layout). from forms how can i run the report in Web Layout?
    Regards,

  • Problem calling web service from OIM

    Hello,
    We have a requirement to get the department name from a web service call and populate the department name on the usr form based on the deptid.
    We created the java web service client class (got the jar file and put it in the JavaTasks directory on OIM server). We unit tested this code successfully from our desktop.
    Then we created the process task in the design console to call the client class method to get the deptname based on the deptid.
    We got a value of "exception" returned from the web service call.
    When we telnet from OIM to the web server, we got "connected to..." followed by "Connection closed by foreign host".
    How can we verify that OIM can talk to the web server?
    Please help.
    Thanks
    Khanh
    Edited by: user12049102 on May 5, 2010 1:06 PM
    Edited by: user12049102 on May 5, 2010 1:49 PM

    We knew that we can make the web service call from the command line. So, we wrote a shell script that calls the web service jar file and it worked.
    It's not elegant but we couldn't figure out why we cannot make the web service call directly from OIM.

  • Problems calling Java Servlets from HTML pages Online

    Hello
    I have created a Web site using Java Servlets, and have acquired some servlet enabled web-space however i am having some difficulty in calling the actual servlets from the HTML pages i was using the line of code as follows
    http://localhost:8080/servlet/....
    followed by the name eg.
    http://localhost:8080/servlet/Login
    however this doesn't seem to be working i have also tried using the exact address of the servlet but this didn't work either
    i.e ..servlet/Login.java
    I was wondering would anyone have any idea as in how the servlets should be called
    Thanks very much

    Once you write the Servlet code, you have to compile and put the classes in the server classpath. To refer these servlets from your pages, you have to configure them in the server configuration(typical a xml file). There you define how you are going to refer to the servlet(/servlet/Logon) and the correponding class.
    -Mak

  • Problem calling Oracle function from Access 2007 / ADO

    Hopefully, I'm posting this in the correct forum. I'm also posting on an Access forum as I'm not entirely sure where the issue lies.
    I'm calling an Oracle function from Access 2007 using an ADO Command object.
    The function takes three input parameters and has a return value and an output parameter. The output parameter is a BLOB, and the return value is varchar2 (either "T" or "N") based on the outcome of the function.
    If I pass correct values to the function, I get the following error message (errs out on the command.execute line):
    Run-time error '-2147467259 (80004005)':
    [Oracle][ODBC][Ora]ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at line 1
    Here's the function:
    FUNCTION GET_ITEMREV_ATTACH(P_ORGANIZATION_ID IN NUMBER,
    P_INVENTORY_ITEM_ID IN NUMBER,
    P_REVISION IN VARCHAR2,
    X_DRAWING OUT BLOB) RETURN VARCHAR2 IS
    RESULT VARCHAR2(1);
    BEGIN
    RESULT := 'T';
    BEGIN
    SELECT L.FILE_DATA
    INTO X_DRAWING
    FROM FND_ATTACHED_DOCUMENTS AD,
    MTL_ITEM_REVISIONS_B IR,
    FND_DOCUMENTS_TL D,
    FND_LOBS L
    WHERE AD.ENTITY_NAME = 'MTL_ITEM_REVISIONS' AND
    AD.PK1_VALUE = IR.ORGANIZATION_ID AND
    AD.PK2_VALUE = IR.INVENTORY_ITEM_ID AND
    AD.PK3_VALUE = IR.REVISION_ID AND
    AD.CATEGORY_ID = 1001216 AND
    D.DOCUMENT_ID = AD.DOCUMENT_ID AND
    D.LANGUAGE = 'US' AND
    L.FILE_ID = D.MEDIA_ID AND
    IR.ORGANIZATION_ID = P_ORGANIZATION_ID AND
    IR.INVENTORY_ITEM_ID = P_INVENTORY_ITEM_ID AND
    IR.REVISION = P_REVISION;
    EXCEPTION
    WHEN OTHERS THEN
    RESULT := 'N';
    END;
    RETURN(RESULT);
    END GET_ITEMREV_ATTACH;
    Here's the VB code I'm using to call the function:
    Private Sub Command8_Click()
    Dim CMD As New ADODB.Command
    Dim conn As ADODB.Connection
    Dim Param1 As ADODB.Parameter
    Dim Param2 As ADODB.Parameter
    Dim Param3 As ADODB.Parameter
    Dim ParamBlob As ADODB.Parameter
    Dim ParamReturn As ADODB.Parameter
    Set conn = New ADODB.Connection
    With conn
    .ConnectionString = "Driver={Oracle in OraHome92};Dbq=OAPLY;UID=***;PWD=*******"
    .CursorLocation = adUseClient
    .Open
    End With
    Set CMD = New ADODB.Command
    Set CMD.ActiveConnection = conn
    CMD.CommandText = "immi_attach_pub.get_itemrev_attach"
    CMD.CommandType = adCmdStoredProc
    Set ParamReturn = CMD.CreateParameter("RESULT", adVarChar, adParamReturnValue, 1)
    CMD.Parameters.Append ParamReturn
    Set Param1 = CMD.CreateParameter("P_ORGANIZATION_ID", adInteger, adParamInput, 1, 6)
    CMD.Parameters.Append Param1
    Set Param2 = CMD.CreateParameter("P_INVENTORY_ITEM_ID", adInteger, adParamInput, 4, 5207)
    CMD.Parameters.Append Param2
    Set Param3 = CMD.CreateParameter("P_REVISION", adVarChar, adParamInput, 2, "04")
    CMD.Parameters.Append Param3
    Set ParamBlob = CMD.CreateParameter("X_DRAWING", adLongVarBinary, adParamOutput, 200000)
    CMD.Parameters.Append ParamBlob
    CMD.Execute , , adExecuteNoRecords *** this is where the error occurs
    conn.Close
    MsgBox CMD.Parameters("RESULT")
    End Sub
    I've tried using different data types for the varchar2 parameters (adVarChar, adBSTR, adChar) with no difference.
    If I pass a bogus value for Param3...."'04'"...the function returns "N" indicating that it actually executed something. But, when I pass the correct value "04", it returns the above mentioned error.
    I can execute the function in PL/SQL just fine, so I'm thinking there's something wrong with the parameters, datatype, or other definitions on the Access side.
    Does anyone have any thoughts? I'm at a dead end with this. Sorry for the long post. Thank you.

    I tried your code with 11107 ODBC/client/database (but with a NULL output blob for convenience sake) and got no errors.
    If you're using 92 ODBC/client, you may want to try upgrading to something more current, or at least getting the latest patch(9208) to see if that helps. Since it works for me I'm guessing it may be a resolved bug in that version.
    Hope it helps,
    Greg

Maybe you are looking for

  • Confirmation of Prd order

    Hi Friends, While i am tryinhg to do confirmation of prd order, i am getting this error  "No prices could be determined for object Activity type 1000/9999/xxxxxx" I am maintaining the prices in KP26 for the above activity. While i am trying to save t

  • Java heap memory errors..

    I make a spider program, but it runs out of memory after ~200 websites. after that it crashes.. or becomes so slow its useless. The problem is in this Spider class , that cant be garbage collected (But I dont see any reason why not) These profilers i

  • Segmenting Contacts Best Practices

    What is the recommended way to segment my database so I can keep a certain group of contacts away from the rest of the automation that's running in my Eloqua instance? This separate segment is going to be a part of an email drip campaign and I don't

  • Mounted DVD image region different to inserted DVD region

    Hello, My DVD is set to 'Region 4' to play Australian DVD's. I created an image of a DVD using the 'DVD/CD Master' image format in order to make a backup DVD. Issue: When I open it in the standard DVD player software, I'm prompted to change FROM 'Reg

  • J2ME Http Connection

    Hi, I have downloaded a midlet which connects to a Http Server(A URL) and gives back the values. Now I am getting all the data with the tags also.But I want to get the values only without tags.The code i am using is * FileViewer.java * Download and v