Pass complex Types with chains to stored procedures: become null

Hello

I would like to pass an array of strings or a type of custom to a PL/SQL stored procedure object, you use the JDBC thin driver. It is possible if the tables or object types contain integers. With strings (resp. varchar2) However, I encountered a repetitive problem, no matter what I tried: the varchar2 field seems to be null in the stored procedure.

There is something special with the passage of short strings?

I tested with Oracle version server 10.2.0.3, 10.2.0.4 and 11.1.0.7.0.
JDBC Thin drivers used are ojdbc14.jar is of 10.2.0.4 and ojdbc5.jar 11.1.0.7.0.
I use Java 5.

Tested approaches include:
-oracle.sql.StructDescriptor, preparedStatement.setSTRUCT, or setStruct
-Pass a Java type that implements the SQLData with preparedStatement.setObject
-Pass a Java type that implements ORAData and ORADataFactory

I tested it with an example of metalink (Doc ID 458572.1), and as I said, this example shows the same problem: strings passed appear as null - in three versions of Oracle that I tested. The example has been changed only with respect to the scheme name.
()Doc ID 458572.1 refers to a bug that shows the behavior I describe here, but this bug should be fixed in 10.2.0.4 and 11).

I can paste some of my source code, but I feel that the solution could be found elsewhere, such as problems, version mismatch, the character set...

Any ideas on the specialties with passage of strings in types of objects or paintings? My strings are null. (For tables, I get the right amount of NULL values).
I even checked that I can pass a string argument simple to a procedure that worked indeed.

Kind regards
Carsten

Advertisement

There is something special with the passage of short strings?

Yes, this is a common problem. You must include orai18n.jar classpath. BTW it is documented here and here.

Tags: Oracle

Similar Questions

  • Spend multiple values with parameter of stored procedure

    CREATE TABLE VTEST_INSERT)

    NUMBER OF MY_ID,

    COLUMN1 VARCHAR2 (50)

    );

    -SELECT * FROM VTEST_INSERT;

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (1, 'TEST1');

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (2, "TEST2");

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (3, "TEST3");

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (4, "TEST4");

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (5, 'TEST5');

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (1, "TEST6");

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (2, 'TEST7');

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (3, "TEST8");

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (4, 'TEST9');

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (5, "TEST10");

    CREATE OR REPLACE

    PROCEDURE VTEST_INSERT_SP (vid in VARCHAR2, vname IN VARCHAR2)

    AS

    BEGIN

    DELETE FROM VTEST_INSERT WHERE MY_ID IN (vid);

    INSERT INTO VTEST_INSERT (MY_ID, COLUMN1) VALUES (vid, vname);

    END;

    /

    EXEC VTEST_INSERT_SP(1,'TEST999');

    This set works well above. But I want to be able to pass multiple values VNAME. so, something like:

    EXEC VTEST_INSERT_SP(1,'TEST999','TEST888','TEST777');

    any help is appreciated. Thank you.

    This would make many inserts each with the same vid and values of different VNAME.

    Try something like this

    1. SET SQLBLANKLINES
    2. ALTER SESSION SET PLSQL_WARNINGS = ' ENABLE: ALL ';
    3. DROP TABLE vtest_insert;
    4. CREATE TABLE vtest_insert (vid NUMBER, vname VARCHAR2 (20));
    5. INSERT ALL
    6. IN vtest_insert (vid, vname) VALUES (1, "yyyy")
    7. IN vtest_insert (vid, vname) VALUES (1, "bb")
    8. IN vtest_insert (vid, vname) VALUES (1, "cccccc")
    9. IN vtest_insert (vid, vname) VALUES (2, "ddd")
    10. IN vtest_insert (vid, vname) VALUES (2, 'ee')
    11. SELECT * FROM .dual 'PUBLIC '.
    12. SELECT * FROM vtest_insert;
    13. CREATE or REPLACE TYPE vnames_tab_ty IS TABLE OF VARCHAR2 (20)
    14. /
    15. DISPLAY ERRORS;
    16. CREATE OR REPLACE PROCEDURE vtest_insert_sp
    17. (
    18. p_vid IN vtest_insert.vid%TYPE,
    19. p_vnames IN vnames_tab_ty
    20. )
    21. DEFINE AUTHID
    22. IS
    23. BEGIN
    24. DELETE FROM vtest_insert WHERE the vid = p_vid;
    25. FORALL idx IN p_vnames. FIRST... p_vnames. LAST
    26. INSERT INTO vtest_insert (vid, vname) VALUES (p_vid, p_vnames (idx));
    27. END vtest_insert_sp;
    28. /
    29. DISPLAY ERRORS;
    30. >
    31. DECLARE
    32. Vnam vnames_tab_ty;
    33. vid vtest_insert.vid%TYPE.
    34. BEGIN
    35. BK.vid: = 1;
    36. BK.vnames: is vnames_tab_ty ('vn-01', 'vn-02', 'vn-03');.
    37. vtest_insert_sp (p_vid-online bk.vid, p_vnames-online bk.vnames).
    38. COMMIT;
    39. BK.vid: = 2;
    40. BK.vnames: is vnames_tab_ty ('vn-04', 'vn-05', 'vn-06', 'vn-07');.
    41. vtest_insert_sp (p_vid-online bk.vid, p_vnames-online bk.vnames).
    42. COMMIT;
    43. END;
    44. /
    45. SELECT * FROM vtest_insert;

    Which produces the following output

    Table created.

    5 rows created.

    VNAME VID

    ---------- --------------------

    1-aaaa

    1 bb

    1 cccccc

    2 ddd

    2 EA

    Type of creation.

    No errors.

    Created procedure.

    No errors.

    PL/SQL procedure successfully completed.

    VNAME VID

    ---------- --------------------

    1 VL-01

    1 VL-02

    1 VL-03

    2 vn-04

    2 vn-05

    2 vn-06

    2 vn-07

    7 selected lines.

    SQL >

    Kind regards

    Dariyoosh

  • passing BOLB or CLOB parameters in stored procedures

    Hi all
    I have this procedure for the insertion of the data:
     create or replace procedure procedure_employee( pname in varchar2, ppicture in blob) is begin insert into employee (name, picture) values (pname, ppicture);
    end;
    / 
    .
    How can I insert images while creating an employee? Can I have an example of performing my procedure?
    Kind regards
    SQL> CREATE TABLE pdm(dname VARCHAR2(30),sname VARCHAR2(30),fname VARCHAR2(30),iblob BLOB);
    
    Table created.
    
    SQL> CREATE OR REPLACE PROCEDURE load_file(pdname IN VARCHAR2,
      2                                        psname IN VARCHAR2,
      3                                        pfname IN VARCHAR2) IS
      4
      5    src_file BFILE;
      6    dst_file BLOB;
      7    lgh_file BINARY_INTEGER;
      8  BEGIN
      9    src_file := bfilename('TEMP', pfname);
     10
     11    INSERT INTO pdm
     12      (dname, sname, fname, iblob)
     13    VALUES
     14      (pdname, psname, pfname, EMPTY_BLOB())
     15    RETURNING iblob INTO dst_file;
     16
     17    DBMS_LOB.OPEN(src_file, dbms_lob.file_readonly);
     18    lgh_file := dbms_lob.getlength(src_file);
     19    DBMS_LOB.LOADFROMFILE(dst_file, src_file, lgh_file);
     20    dbms_lob.close(src_file);
     21    COMMIT;
     22  END load_file;
     23  /
    
    Procedure created.
    
    SQL> CREATE OR REPLACE DIRECTORY TEMP AS 'c:\';
    
    Directory created.
    
    SQL> EXECUTE load_file('Test pdname','Test psname','extract.jpg');
    
    PL/SQL procedure successfully completed.
    
    SQL> SELECT dname,sname,fname,DBMS_LOB.getlength(iblob)
      2  FROM pdm;
    
    DNAME                          SNAME
    ------------------------------ ------------------------------
    FNAME                          DBMS_LOB.GETLENGTH(IBLOB)
    ------------------------------ -------------------------
    Test pdname                    Test psname
    extract.jpg                                         2111
    
    SQL> 
    

    NOTE: The path to the 'TEMP' directory object exists already physically in the server database NOT in the local computer.

  • Stored procedures - default NULL

    Glad that Oracle will continue development on the DSP!

    I work with a huge procedure stored with several parameters are to be set as DEFAULT NULL in SQL.

    When I generate a physical dataservice for this procedure he does not display as optional parameters.
    How can I pass in NULL as xquery query parameter? -The models are varchar2, date and number (string, dataTime and decimal in xml/xquery).
    If I pass an empty string to a decimal or date type, I get an error.


    Does anyone have any experience with this kind of problem?

    / Jens-Martin

    Change the schema manually and change the items so that they have minOccurs = '0 '.

    A "null" in XQuery is the empty sequence.

    In the test view 3.x, there is a box set as Null.

    DSP 2.5, you cannot pass a value of null from the client - you need to call the function in the service of physical data of another function and pass it (). (i.e. leave $arg: = if (length ($mystring1) = 0) then () of other $mystring1)

  • stored procedures, newbie question

    I am at the point with my Web site where I need to think about the optimization of the query and have started looking at stored procedures for the first time.

    1. am I right in thinking the benefit of the execution of stored procedures is that it is a pre-compiled query?

    2. I'm trying to use the query cache as my 'normal' queries go, but is it possible to cache the results of a stored procedure?

    In practice, using 1 & 2 would provide a significant increase in performance.

    Personally, I use it only for large heavy updates or deletions. For example, I have an Oracle package with a bunch of procedures that run when a person completes an order - this process involves many tables, deletions, updates and a relatively simple logic. I think that the ideal candidate for a stored procedure.

    I use CF as an alternative if, for example, I have to repeat a load of complex business logic in a stored procedure that I have already written in a CFC.

    Keep in mind the benefits of a stored procedure - basically precompiled code. Don't forget that if you are using well trained cfqueries with cfqueryparams, execution plan gets compiled to the top in the first round * anyway *, so if you call a stored procedure or run your query really there is no difference.

    And Yes - do not underestimate the additional time it takes for a developer to do everything in the stored procedures rather than ColdFusion, they don't call it rapid development of applications for anything

    Don't forget as well as someone can write a stored procedure to poorly coded as well as they can write a wrong encoded query. At least if the developer has its application in front of him, he can see instantly what he needs of the index and locate errors, you could go years before realizing a person made a mistake inside a stored procedure, as no one can see the code.

    Regarding security Yes - if you really want to limit security then sprocs will do that for you. However in most of the applications I've seen the right developer has the possibility to write a query, as they see fit.

    Once I use stored procedures while I think of it - if you have more than one application that needs to do the same thing: this should * definitely * be a stored procedure.

    Basically, the same rules apply to them as any other aspect of programming; security of the duplication of code, efficiency, ease of maintenance - it's all a matter of their maximum weight and decide what is best.

  • Stored procedure to add a record do not add record

    I have never successfully added a record via a stored procedure, but I managed with adding records through behaviors using recordsets with stored procedures and server, so I know that connections work. I have the data to MS SQL Server and ColdFusion web page. When I enter data and click 'Submit', it does absolutely nothing. When I check the SQL table, no record has been added. Any help would be greatly appreciated. Here are my stored procedure:


    Replace:



    Null value

    With:

    I provide each form with a value variable by default so that a value will always exist for each variable.

    Use the null attribute, if the value is 'yes', WHAT NULL value will be passed to the parameter of the stored procedure, if the content of the attribute value will be used

    http://livedocs.Adobe.com/ColdFusion/8/htmldocs/help.HTML?content=Tags_p-q_14.html#1102102

  • Can we declare several tags < sequence > in a complex type?

    Hi all

    Can I use more than one <>tags in xml schema?

    < name XS: complexType 'Demo' = >
    < xs: Sequence minoccurs = "1" maxoccurs = "1" >

    < / xs: SEQUENCE >
    < xs: Sequence minoccurs = "0" maxoccurs = "1" >

    < / xs: SEQUENCE >

    < / xs: complexType >

    If you look at the xml example above there are two sequences in a complex type with different values of minoccurs and maxoccurs. This XML is valid? why I need it is that I have a

    XML with many elements, some of them have minoccurs = "1" maxoccurs = "1" and others should have the other combination of min and max attributes. I want to

    Declare it in the sequence, rather than declaring next to each individual item. is this possible?

    Thank you.

    Hello

    This XML is valid?

    No, a complexType expects that one child, but you can do this:

    
      
        
        ...
        
        
        ...
        
      
    
    

    However...

    XML with many elements, some of them have minoccurs = "1" maxoccurs = "1" and others should have the other combination of min and max attributes.
    I would like to say in the sequence, rather than declaring next to each individual item. is this possible?

    minOccurs and maxOccurs declared in the sequence to the sequence as a whole, not apply to its individual components.

    For example:

    
         
              
                   
                        
                        
                   
                   
                        
                        
                   
              
         
         
    
    

    What do you expect will work for the first sequence of elements (test1 and test2) but anyway minOccurs and maxOccurs for lack of elements to 1, then what good wrapping it in a sequence?

    If I understand correctly what you want, it won't work for the second sequence.
    For example, it will be valid:

    
      
      
      
      
    
    

    but this won't:

    
      
      
      
    
    
  • Java stored procedure

    Hello

    I tried to register with the Java stored procedure and created a Java class for it. I am quite successful in compiling and executing the code using the Java compiler in Windows CMD, but I meet below error when I try to do the same thing via Java stored proc.
    [email protected]> CREATE OR REPLACE  FUNCTION WINREGREAD(REGKEY VARCHAR2,REGVALUE VARCHAR2) RETURN VARCHAR2
      2  AS
      3  LANGUAGE JAVA NAME 'WindowsRegistry.readString(java.lang.String,java.lang.String) return java.lang.String';
      4  /
    
    Function created.
    [email protected]> call winregread('Software\\MyApps','Test') into :mystring;
    call winregread('Software\\MyApps','Test') into :mystring
    *
    ERROR at line 1:
    ORA-29532: Java call terminated by uncaught Java exception: java.lang.NullPointerException
    
    
    Elapsed: 00:00:00.01
    [email protected]>
    Here's the Java code and its put
    //Uncomment the below like while compiling Java source in DB
    //CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "WinRegistry" AS
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.prefs.Preferences;
    public class WindowsRegistry {
      public static final int HKEY_CURRENT_USER = 0x80000001;
      public static final int HKEY_LOCAL_MACHINE = 0x80000002;
      public static final int REG_SUCCESS = 0;
      public static final int REG_NOTFOUND = 2;
      public static final int REG_ACCESSDENIED = 5;
      private static final int KEY_ALL_ACCESS = 0xf003f;
      private static final int KEY_READ = 0x20019;
      private static Preferences userRoot = Preferences.userRoot();
      private static Preferences systemRoot = Preferences.systemRoot();
      private static Class<? extends Preferences> userClass = userRoot.getClass();
      private static Method regOpenKey = null;
      private static Method regCloseKey = null;
      private static Method regQueryValueEx = null;
      static {
        try {
          regOpenKey = userClass.getDeclaredMethod("WindowsRegOpenKey",
              new Class[] { int.class, byte[].class, int.class });
          regOpenKey.setAccessible(true);
          regCloseKey = userClass.getDeclaredMethod("WindowsRegCloseKey",
              new Class[] { int.class });
          regCloseKey.setAccessible(true);
          regQueryValueEx = userClass.getDeclaredMethod("WindowsRegQueryValueEx",
              new Class[] { int.class, byte[].class });
          regQueryValueEx.setAccessible(true);
        }
        catch (Exception e) {
          e.printStackTrace();
        }
      }
      private WindowsRegistry() {  }
    
      public static String readString(String key, String valueName)
       throws IllegalArgumentException, IllegalAccessException,
        InvocationTargetException 
      {
    
        int hkey = HKEY_LOCAL_MACHINE;
          return readString(systemRoot, hkey, key, valueName);
      }
    
    private static String readString(Preferences root, int hkey, String key, String value)
    throws IllegalArgumentException, IllegalAccessException,
        InvocationTargetException 
      {
        try
    {
        int[] handles = (int[]) regOpenKey.invoke(root, new Object[] {
            new Integer(hkey), toCstr(key), new Integer(KEY_READ) });
    
        if (handles[1] != REG_SUCCESS) {
          return null;
        }
        byte[] valb = (byte[]) regQueryValueEx.invoke(root, new Object[] {
            new Integer(handles[0]), toCstr(value) });
        regCloseKey.invoke(root, new Object[] { new Integer(handles[0]) });
        return (valb != null ? new String(valb).trim() : null);
    }
    catch (NullPointerException e)
    { 
    return e.getMessage();
    }
      }
    // utility
      private static byte[] toCstr(String str) {
        byte[] result = new byte[str.length() + 1];
        for (int i = 0; i < str.length(); i++) {
          result[i] = (byte) str.charAt(i);
        }
        result[str.length()] = 0;
        return result;
      }
    
    //Begin - Remove the following lines while compiling Java source in DB
    public static void main(String[] args) throws Exception 
      {
    String value = "";
    value = WindowsRegistry.readString("Software\\MyApps","Test");
        System.out.println("Reg key Value is: " +value);
      }
    //End
    
    };
    
    //Output
    d:\Java_Test>javac WindowsRegistry.java
    
    d:\Java_Test>java WindowsRegistry
    Reg key Value is: TEST VALUE
    
    -----------------------------------------------------------------------------
    
    Env. Details:
    =======
    Windows Vista 32 bit
    
    DB:
    ====
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
    As you can see, I get my results when I run the same command prompt class, but encounter an error when it is executed from the DB.

    Also, I have granted permission to the runtime using DBMS_JAVA. Is there an any other permission problem?

    Kindly help and let me know if you need another entry.

    Thank you!

    Kind regards
    Prazy

    The Pref class is not supported in Oracle. So I used Java SP for BACK orders executed and calling in turn REG QUERY command.
    Tested with Windows 2003, Win XP and Win Vista (32-bit).

    [email protected]> select banner from v$version;
    
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Release 11.1.0.6.0 - Production
    PL/SQL Release 11.1.0.6.0 - Production
    CORE     11.1.0.6.0     Production
    TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
    NLSRTL Version 11.1.0.6.0 - Production                                                                                                                                                                                                                    
    
    Elapsed: 00:00:00.00
    [email protected]> CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "WindowsRegistry" AS
      2  import java.io.*;
      3  import java.lang.*;
      4
      5  public class WindowsRegistry {
      6
      7  public static String ReadKey(String key,String valueName)
      8  {
      9       String finalVal=null;
     10       String curVal=null;
     11       String command="reg query " + key + " /v " + valueName;
     12         try {
     13             // get runtime environment and execute child process
     14             Runtime systemShell = Runtime.getRuntime();
     15             Process output = systemShell.exec(command);
     16             // open reader to get output from process
     17             BufferedReader br = new BufferedReader (new InputStreamReader(output.getInputStream()));
     18             String line = null;
     19              while((line = br.readLine()) != null )
     20                  {
     21                 finalVal = curVal;
     22                      curVal = line;
     23                  }
     24                 output.waitFor();
     25            //get the value by calling findkeyval method
     26            finalVal=findKeyVal(finalVal.trim(),valueName);
     27             return finalVal;
     28             }
     29          catch (IOException ioe){ return "";}
     30          catch (Throwable t) { return "";}
     31  }
     32
     33  //Method to split the output and retrieve key value
     34  public static String findKeyVal(String keyLine,String valName)
     35  {
     36       String retVal="";
     37       String [] temp = null;
     38       temp = keyLine.split("\\s+");
     39       if (temp[0].equals(valName)) {
     40            for (int i=2; i CREATE OR REPLACE FUNCTION WinRegRead(keyPath varchar2,keyName varchar2) RETURN VARCHAR2
      2  AS
      3  LANGUAGE JAVA NAME 'WindowsRegistry.ReadKey(java.lang.String,java.lang.String) return java.lang.String';
      4  /
    
    Function created.
    
    Elapsed: 00:00:00.01
    [email protected]> var keyVal varchar2(50)
    [email protected]> print
    
    KEYVAL
    --------------------------------------------------------------------------------------------------------------------------------                                                                                                                          
    
    [email protected]> call WinRegRead('HKLM\Software\Oracle','inst_loc') into :keyVal;
    
    Call completed.
    
    Elapsed: 00:00:00.04
    [email protected]> print
    
    KEYVAL
    --------------------------------------------------------------------------------------------------------------------------------
    C:\Program Files (x86)\Oracle\Inventory                                                                                                                                                                                                                   
    

    Fact!

    I hope this might help someone!

    Kind regards
    Prazy

  • Problem with the Entity Framework by using stored procedures

    I am developing a project with Oracle DB and Entity Framework.
    Due to performance issues, for some querys I uses procedures stored instead of LINQ queryies,
    When I try to add my model EF procedure, the procedure is added but the Model Designer
    It does not acknowledge the columns returned by the procedure.
    so I can't create something complex to the user the results of the procedure
    in a domain service

    Here's the relevant readme which has some tips: http://www.oracle.com/technetwork/topics/dotnet/tech-info/default-338300.html#mozTocId610465

    If you do a forum search there is further discussion of the issues, and the readme file provided with version beta has also some information.

    But I agree with the general theme: using stored procedures in the EF is a PITA. :( I really hope they do something to make it easier in the future because this is probably the single most important weakness in the implementation of Oracle EF and establishment of a complex type is your time and picky it's ridiculous. (I found it less problematic if your procedure returns a complete picture that your model has already an entity for, because you can get away with only add the entry to one of the configurations for the cursor rather than one for each column.)

    Even an external tool where direct you to the procedure and it creates the configuration entries to be able to copy and paste would be a huge improvement.

  • Call a PL/SQL stored procedure - data type mismatch

    I call a PL/SQL stored procedure from within a procedure of ODI using the specified technique page Cezar and Julien (http://odiexperts.com/how-to-use-plsql-procedures-and-functions-in-odi) and I get the error "Wrong number or argument types»

    I tested each of the types of parameters, in that I'm passing and it is the text that is causing the problem. I tried to use 'Text' and 'Alphanumeric' for the data type of the variable of the ODI and so many VARCHAR2 and VARCHAR for the PL/SQL parameter type and I can't make it work.

    Is there a trick for passing a string in the ODI PL/SQl?

    Hello

    Ensure

    1. to declare/refresh of the variable before call to PL/SQL.

    2. If the variable is of "alphanumeric" ODI calling must be attached to apostrophes and prefix with the code project as ' #MYPROJECT. ODI_Var'

    3. as parameters you have u who must pass both during the call (IN, OUT, etc.).

    Thank you
    Guru

  • Classic ASP, passing Null to a stored procedure

    I'm having a problem passing NULL to a stored procedure on a MS SQL Server. The code is classic ASP.

    I built the sql Command first, and then remoteDB.Connection.Execute (sqlCommand, adCmdText)

    My classic asp code to construct the sqlCommand object
    sqlCommand = "procWebAddProspectOwner" & "1.25," & "'" & "HHTitle" & "','" & 'HHFirstName' & 'NULL' & ',' & 'NULL '.

    The writing of the response to the web browser for debugging shows this
    procWebAddProspectOwner 1.25, 'HHTitle', 'HHFirstName', NULL, NULL

    ADODB. Connection error '800a0bb9 '.
    Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.


    Trouble shoot I have cut and paste this into the asp the elucidating of SQL query page and it works fine.
    procWebAddProspectOwner 1.25, 'HHTitle', 'HHFirstName', NULL, NULL

    ideas:
    David

    "DEPearson" wrote in message
    News:[email protected] Macromedia.com...
    > ADODB. Connection error '800a0bb9 '.
    > Arguments are of the wrong type, are out of acceptable range, or are in
    > conflict between them.
    >

    It is usually a missing connection string. Make sure that the connection
    string is there, you wrote that your connections and right
    folder is located on the server.

  • Passing an array as a parameter of java (java controls) for the stored procedure

    Hello

    I use java controls (BEA Weblogic Workshop 8.1) to call a stored procedure and send an array as a parameter to the stored procedure of java. The following code throws an exception 'Fail to convert the internal representation.

    Java code
    import com.bea.control.DatabaseControl.SQLParameter;

    Here I create the java
    int [] = {12,13,14} javaArray.

    The code below is used to create the table from sql to oracle for the procedure
    SQLParameter [] params = new SQLParameter [1];
    Object obj0 = javaArray;
    params [0] = new SQLParameter (obj0, oracle.jdbc.OracleTypes.ARRAY, SQLParameter.IN);

    the code below calls the myFunc in file OJDBCtrl.jcx
    String success = dbControl.testFunc (params);

    OJDBCtrl.jcx
    /**
    * @jc: = sql statement ' call CMNT_TST_PROC (?)).
    */
    String Myfunc (SQLParameter [] param);

    The stored procedure that is used:

    SL_tab IS NUMBER TABLE INDEX BY PLS_INTEGER;
    Procedure cmnt_tst_proc (cmnt_tst sl_tab);
    Procedure cmnt_tst_proc (cmnt_tst sl_tab) is
    BEGIN
    dbms_output.put_line ('Hello');
    END;


    I'm getting the following exception

    Failure = Java.Sql.SqlException: Internal failure to convert the representation: [[email protected] [ServiceException] >]
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
    at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:861)
    at oracle.sql.ARRAY.toARRAY(ARRAY.java:210)
    at oracle.jdbc.driver.OraclePreparedStatement.setObjectCritical(OraclePreparedStatement.java:7768)
    at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7449)
    at oracle.jdbc.driver.OraclePreparedStatement.setObjectInternal(OraclePreparedStatement.java:7837)
    at oracle.jdbc.driver.OracleCallableStatement.setObject(OracleCallableStatement.java:4587)
    at weblogic.jdbc.wrapper.PreparedStatement.setObject(PreparedStatement.java:244)
    at com.bea.wlw.runtime.core.control.DatabaseControlImpl._setParameter(DatabaseControlImpl.jcs:1886)
    at com.bea.wlw.runtime.core.control.DatabaseControlImpl.getStatement_v2(DatabaseControlImpl.jcs:1732)
    at com.bea.wlw.runtime.core.control.DatabaseControlImpl.invoke(DatabaseControlImpl.jcs:2591)
    at com.bea.wlw.runtime.core.dispatcher.DispMethod.invoke(DispMethod.java:377)
    at com.bea.wlw.runtime.core.container.Invocable.invoke(Invocable.java:433)
    at com.bea.wlw.runtime.core.container.Invocable.invoke(Invocable.java:406)
    at com.bea.wlw.runtime.core.container.Invocable.invoke(Invocable.java:249)
    at com.bea.wlw.runtime.jcs.container.JcsContainer.invoke(JcsContainer.java:85)
    at com.bea.wlw.runtime.core.bean.BaseContainerBean.invokeBase(BaseContainerBean.java:224)
    at com.bea.wlw.runtime.core.bean.SLSBContainerBean.invoke(SLSBContainerBean.java:109)
    at com.bea.wlwgen.StatelessContainer_ly05hg_ELOImpl.invoke(StatelessContainer_ly05hg_ELOImpl.java:153)
    ...

    Can you please let me know, what am I doing wrong and how can I pass an array to a procedure/function using java controls.

    Any help will be much appreciated.



    Published by: user12671762 on February 24, 2010 05:03

    Published by: user9211663 on February 24, 2010 21:04

    Try using an oracle.sql.ARRAY with a nested table or varray instead of a table index. Create the type SQL and Java object as follows

        SQL> create type sl_tab as varray(3) of integer;
        Java:
            ArrayDescriptor ad = ArrayDescriptor.createDescriptor
                (".SL_TAB", java.sql.Connection);
            Object elements = new Object[3];
            elements[0] = new Integer(12);
            elements[1] = new Integer(13);
            elements[2] = new Integer(14);
            oracle.sql.ARRAY array =
                new oracle.sql.ARRAY(ad, oracle.jdbc.OracleTypes.ARRAY, elements);
            SQLParameter[] params = new SQLParameter[1];
            params[0] =
                new SQLParameter(array, oracle.jdbc.OracleTypes.ARRAY, SQLParameter.IN);
            String succ = dbControl.testFunc(params);
    

    I don't think that you can pass an array of Java, this is why you have more success using an oracle.sql.ARRAY with a SQL varray. -Michael-

  • Error PLS-00306 with stored procedure

    I am trying to create a simple package and store the procedure to remove the date of treatment for Crystal Reports can read all data. I used an example on the web site for Crystal report as reference in SAP: link: [http://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/1084c536-711e-2b10-e48a-924a60745253;jsessionid= (J2EE3417200) ID0966300750DB00193623365600119940End]

    I ran the following and receive PLS-00306: wrong number or type of argument on the stored procedure. I am also pulling data with a databaselink to another data base given that our third-party vendor will not connect directly to the main database.

    I am new to PL/SQL, so I don't know what else to solve problems. Thank you for taking the time to review this.

    -1. Create a temporary table
    CREATE TEMPORARY TABLE global test_temp
    (processdate DATE NOT NULL);

    -2.Create package w / require REF CURSOR for Crystal reports
    CREATE or REPLACE PACKAGE test_package
    IN the TYPE processdate_TYPE IS REF CURSOR
    RETURN test_temp % ROWTYPE;
    END test_package;
    /

    -3. Stored procedure
    CREATE OR REPLACE PROCEDURE test_Procedure
    (processdate_cursor IN OUT test_Package.processdate_TYPE,
    processdate_parameter IN test_temp.processdate%TYPE)
    AS
    processdate DATE;
    BEGIN
    OPEN FOR Processdate_cursor
    SELECT processdate
    OF [email protected]
    WHERE processname = "F_ExecuteScheduleProcess" and processtype = ';
    END test_Procedure;
    /

    You say that you do not understand where there is a wrong number or type?

    This error occurs because there is an incorrect number of parameters passed. Your procedure
    Test_SP expects 3 parameters as defined by you as follows
    (p_ID in number,
    p_firstname OUT varchar2,
    p_lastname OUT varchar2)

    But when you run, you're not not p_id, has not managed to p_firstname, has failed to p_lastname. So there are number of parameters and that's what suggests the error.

    To run your test_sp
    Declare
    sFirstName Test_Table.FirstName%Type;
    sLastName Test_Table.Lastname%Type;
    Nest Test_Table.ID%Type: = 1;
    Begin
    Test_SP(1,sFirstName,sLastName);
    End;

    I hope this helps.

  • Pass parameters to the box of the HTML form to a stored procedure

    I'm always looking for a solution to my problem of forms. For the record, I don't use Express applications to create my application - I use PL/SQL right. I need to know how to pass parameters from the box to my Web form. I welcome people select one or more checkboxes in a form that calls a remove function to delete the selected records. What I read in Oracle of the "Guide to the developer of database applications - Fundamentals" is not useful to me. If someone could tell me some examples, maybe I could see what I'm doing wrong. Here is what I wrote in "the developer of database applications - fundamentals Guide ':

    All the boxes with the same NAME attribute are a group of checkbox. If none of the boxes in a group is selected, the stored procedure receives a null value for the corresponding parameter.

    If a check box in a group is selected, the stored procedure receives a single parameter of VARCHAR2.

    If more than one check box in a group is enabled, the stored procedure receives a parameter with the type of PL/SQL TABLE OF VARCHAR2. You must declare a type like this, or use a pre-defined as OWA_UTIL. IDENT_ARR. To retrieve the values, use a loop:
    CREATE OR REPLACE PROCEDURE handle_checkboxes ( checkboxes owa_util.ident_arr )
    AS
    BEGIN
    ...
    FOR i IN 1..checkboxes.count
    LOOP
    htp.print('&lt;p&gt;Checkbox value: ' || checkboxes(i));
    END LOOP;
    ...
    END;
    /
    SHOW ERRORS;

    I'm not sure that understand what your question is.

    If your web form has the following defined all with the same name:

    one
    two
    three
    

    You create and save a procedure to manage the sending of a form that contains a parameter with the name of attrib type owa_util.ident_arr for example:

    create or replace procedure handle_form(attrib owa_util.ident_arr) as
      iter number;
    begin
      for iter in attrib.first .. attrib.last loop
        -- do something with attrib(iter)
      end loop;
    end;
    /
    

    Now, the only problem with this Manager (or any other), is that if the user selects any of the boxes, or no value for the parameters expected, the Manager called with parameters missing or with on all of the passed parameters, as well as the call will error.

    To move, you need to provide default values for all parameters passed to your handler such as the settings of ident_arr, but with ident_arr settings, it's hard to do with autonomous procedures. If you place your procedure in a package you can define variables of package-level of the appropriate types that can be used as default values:

    create or replace package my_web as
      empty_arr owa_util.ident_arr;
    
      procedure handle_form(attrib owa_util.ident_arr := empty_arr);
    end my_web;
    /
    create or replace package body my_web as
      procedure handle_form(attrib owa_util.ident_arr := empty_arr) as
        iter number;
      begin
        for iter in attrib.first .. attrib.last loop
          -- do something with attrib(iter)
        end loop;
      end;
    end my_web;
    /
    

    now, when you hit in the situation where the user does not select the checkboxes, the call to handle_form will be no reviewable error on due to missing parameters, and the empty_arr will not have all the elements to iterate over so the loop in the body of the procedure will be fine and you will be able to retrieve each value of the checkbox selected attrib table when you iterate on it.

  • Access to the defined user compex types in stored procedure

    Hi all

    I have two complex types defined by the user which are defined as follows:

    create or replace

    TYPE 'MA_ROOT_OBJECT' AS THE OBJECT

    (

    USER_MACHINE VARCHAR2 (30),

    USER_DOMAIN VARCHAR2 (60),

    DATE OF EVENT_ACTIVITY_DT,

    USERCOLL MA_USER_TABLE,

    DATABASECOLL MA_DATABASE_TABLE

    )

    And USERCOLL and DATABASECOLL are again a different complex types defined by user 2. What should I do for the DATABASECOLL of the stored procedure?

    I am getting error below when I try to access:

    • Error (13.31): PLS-00302: component 'TMP_DATABASECOLL' must be declared

    ######################################################

    PROCEDURE SP_MSACCESS_METADATA)

    MSACCESSCOLL IN MA_ROOT_TABLE,

    STATUS OF THE VARCHAR2)

    AS

    TMP_DB_NAME VARCHAR2 (100);

    TMP_DATABASECOLL MA_DATABASE_TABLE;

    meter NUMBER (3);

    BEGIN

    SAVEPOINT INIT;

    TMP_DB_NAME: = MSACCESSCOLL. TMP_DATABASECOLL. DB_NAME

    EXCEPTION

    WHILE OTHERS THEN

    STATUS: = "ERROR BY STORING DEMAND MSACCESS."

    RAISE_APPLICATION_ERROR (-20001, SQLERRM);

    ROLLBACK TO SAVEPOINT INIT;

    END SP_MSACCESS_METADATA;

    Since MA_DATABASE_TABLE is a collection, you must tell Oracle item on which you want to:

    For example, if you want only one element in the collection:

    TMP_DB_NAME: = MSACCESSCOLL. DATABASECOLL (1). DB_NAME;

    otherwise, you will need to loop.

Maybe you are looking for

  • HP pavilion 15-b100: QEnter password administrator or power on password

    OLA, um rectangulo azul apareceu no ecra meu pc as diz "power on password or administrator password. APOs try 3 vezes appears a 75766700 want. Alguem me pode help?

  • Re: Magenta/Purple mount screen Satellite Pro C660-2JR

    Hello I just brought a new laptop Satellite Pro C660-2JR and a few hours after getting it I noticed he has a purple cast/tint on any gray tones and is especially noticeable if a B & W image is seen because it has tones of purple, white and black with

  • TextEdit display error at startup

    For some reason any now when I restart my Macbook (2009), open TextEdit and show this error {'meta': {'-l' text ': 'ltr', 'name': '简体中文","isoName":"Simplified Chinese","isoCodes": ['zh - cn', 'zh-hans', 'zh']}} As everyone has ideas please I can just

  • Reference length Separator - Pages

    After nearly an hour of looking, I found how to get my reference separator to the right place. Now, I want to set the length of this one - to run the length of the text in which it is located, that is to say. from margin to margin across the page. Bu

  • HOTFIX KB888111 XPSP3

    I NEED TO INSTALL A HOTFIX FOR WINDOWS XP SP3 TO CAN INSTALL A DRIVER FOR MY DELL INSPIRON N411Z HD AUDIO SRS 2.0.


HashFlare