Inserting ARRAYs of Objects in Oracle 9i

I am trying to insert ARRAYs of user-defined types into a table in Oracle. I have had success doing this once, so I wanted to do it again with other tables. Everything works perfectly for the first table I set up and it fails thereafter.
I'm trying to figure out if there's some special code I need, or something on the Oracle side, in order to have multiple tables work this way.
The Exception I'm getting is posted at the bottom. The following should give adequate context to my problem.
The Oracle defined type is:
CREATE OR REPLACE TYPE source_language_type AS OBJECT(
csi INTEGER
,language_id VARCHAR2(10)
,source_name VARCHAR2(255)
,is_default INTEGER
And the Oracle definition for the ARRAY of these types is:
CREATE TYPE source_language_tabtype AS TABLE OF source_language_type
My Java class that implements SQLData follows:
public class DBSourceLangInput implements SQLData {
public static final String SQL_NAME = "source_language_type";
private int _csi;
private String _langId;
private String _name;
private int _isDefault;
public DBSourceLangInput(int csi, String langId, String name, int isDefault) {
_csi = csi;
_langId = langId;
_name = name;
_isDefault = isDefault;
public String getSQLTypeName() throws SQLException {
return SQL_NAME;
public void readSQL(SQLInput stream, String typeName) throws SQLException {
setCsi(stream.readInt());
setLangId(stream.readString());
setName(stream.readString());
setIsDefault(stream.readInt());
public void writeSQL(SQLOutput stream) throws SQLException {
stream.writeInt(getCsi());
stream.writeString(getLangId());
stream.writeString(getName());
stream.writeInt(getIsDefault());
...etc....
And the code to insert the ARRAY of those objects follows:
private void loadSourceLang(OracleConnection oraConn, DBSourceLangInput[] sourceLangs, OracleCallableStatement cs) throws SQLException {
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("source_language_tabtype", oraConn);
ARRAY membersArray = new ARRAY(descriptor, oraConn, sourceLangs);
cs.setARRAY(1, membersArray);
cs.registerOutParameter(2, OracleTypes.INTEGER);
cs.execute();
The Exception is as follows:
SQLException: invalid name pattern: SDS4.package_source_type
SQLState: null
Message: invalid name pattern: SDS4.package_source_type
Vendor: 17074
java.sql.SQLException: invalid name pattern: SDS4.package_source_type
     at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:169)
     at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:211)
     at oracle.jdbc.oracore.OracleTypeADT.initMetadata(OracleTypeADT.java:425)
     at oracle.jdbc.oracore.OracleTypeADT.init(OracleTypeADT.java:344)
     at oracle.sql.StructDescriptor.initPickler(StructDescriptor.java:151)
     at oracle.sql.StructDescriptor.<init>(StructDescriptor.java:129)
     at oracle.sql.StructDescriptor.createDescriptor(StructDescriptor.java:97)
     at oracle.sql.STRUCT.toSTRUCT(STRUCT.java:322)
     at oracle.jdbc.oracore.OracleTypeADT.toDatum(OracleTypeADT.java:254)
     at oracle.jdbc.oracore.OracleTypeADT.toDatumArray(OracleTypeADT.java:297)
     at oracle.jdbc.oracore.OracleTypeUPT.toDatumArray(OracleTypeUPT.java:137)
     at oracle.sql.ArrayDescriptor.toOracleArray(ArrayDescriptor.java:750)
     at oracle.sql.ARRAY.<init>(ARRAY.java:116)
     at com.lxnx.metadatatools.sdsfeed.SDSFeed.loadPackageSource(SDSFeed.java:961)
....etc.....
The code all seems right. It's identical to the code I'm successfully using to load another identical table.
Again, is this a Java problem or an Oracle problem?
Thanks again!

I found my problem!
I failed to post the one other snippet of code, where I actually create the CallableStatement object as follows:
cs = (OracleCallableStatement) oraConn.prepareCall("CALL ABC.XYZ(?,?)");
All my other sql statements are all lower case (select, insert, etc.), so I didn't think that should matter.
However, as soon as I made these call statements all uppercase (as above), that fixed my problem!
Very picky!!

Similar Messages

  • How to pass a array of object to oracle procedure using callable

    Hi,
    I am calling a oracle stored procedure using callable statement which has IN and OUT parameter of same type.
    IN and OUT are array of objects. (ie) IN parameter as Array of Objects and OUT parameter as Array of Objects
    here are the steps i have done as advised from oracle forum. correct me if i am in wrong direction
    ORACLE types and Stored Procedure
    CREATE OR REPLACE
    TYPE APPS.DEPARTMENT_TYPE AS OBJECT (
    DNO NUMBER (10),
    NAME VARCHAR2 (50),
    LOCATION VARCHAR2 (50)
    CREATE OR REPLACE
    TYPE APPS.DEPT_ARRAY AS TABLE OF department_type;
    CREATE OR REPLACE package body APPS.insert_object
    IS
    PROCEDURE insert_object_prc (d IN dept_array, d2 OUT dept_array)
    IS
    BEGIN
    d2 := dept_array ();
    FOR j IN 1 .. d.COUNT
    LOOP
    d2.EXTEND;
    d2 (j) := department_type (d (j).dno, d (j).name, d(j).location);
    END LOOP;
    END insert_object_prc;
    END insert_object;
    JAVA CODE
    Value Object
    package com.custom.vo;
    public class Dep {
    public int empNo;
    public String depName;
    public String location;
    public int getEmpNo() {
    return empNo;
    public void setEmpNo(int empNo) {
    this.empNo = empNo;
    public String getDepName() {
    return depName;
    public void setDepName(String depName) {
    this.depName = depName;
    public String getLocation() {
    return location;
    public void setLocation(String location) {
    this.location = location;
    to call stored procedure
    package com.custom.callable;
    import com.custom.vo.Dep;
    import oracle.jdbc.OracleCallableStatement;
    import oracle.jdbc.OracleConnection;
    import oracle.jdbc.OracleTypes;
    import oracle.jdbc.pool.OracleDataSource;
    import oracle.sql.ARRAY;
    import oracle.sql.ArrayDescriptor;
    import oracle.sql.Datum;
    import oracle.sql.STRUCT;
    import oracle.sql.StructDescriptor;
    public class CallableArrayTryOut {
    private static OracleDataSource odcDataSource = null;
    public static void main(String[] args) {
    OracleCallableStatement callStatement = null;
    OracleConnection connection = null;
    try {
    odcDataSource = new OracleDataSource();
    odcDataSource
    .setURL("......");
    odcDataSource.setUser("....");
    odcDataSource.setPassword("....");
    connection = (OracleConnection) odcDataSource.getConnection();
    } catch (Exception e) {
    System.out.println("DB connection Exception");
    e.printStackTrace();
    Dep[] dep = new Dep[2];
    dep[0] = new Dep();
    dep[0].setEmpNo(100);
    dep[0].setDepName("aaa");
    dep[0].setLocation("xxx");
    dep[1] = new Dep();
    dep[1].setEmpNo(200);
    dep[1].setDepName("bbb");
    dep[1].setLocation("yyy");
    try {
    StructDescriptor structDescriptor = new StructDescriptor(
    "APPS.DEPARTMENT_TYPE", connection);
    STRUCT priceStruct = new STRUCT(structDescriptor, connection, dep);
    STRUCT[] priceArray = { priceStruct };
    ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor(
    "APPS.DEPT_ARRAY", connection);
    ARRAY array = new ARRAY(arrayDescriptor, connection, priceArray);
    callStatement = (OracleCallableStatement) connection
    .prepareCall("{call insert_object.insert_object_prc(?,?)}");
    ((OracleCallableStatement) callStatement).setArray(1, array);
    callStatement.registerOutParameter(2, OracleTypes.ARRAY,
    "APPS.DEPT_ARRAY");
    callStatement.execute();
    ARRAY outArray = callStatement.getARRAY(2);
    Datum[] datum = outArray.getOracleArray();
    for (int i = 0; i < datum.length; i++) {
    oracle.sql.STRUCT os = (oracle.sql.STRUCT) datum[0];
    Object[] a = os.getAttributes();
    for (int j = 0; j < a.length; j++) {
    System.out.print("Java Data Type :"
    + a[j].getClass().getName() + "Value :" + a[j]
    + "\n");
    connection.commit();
    callStatement.close();
    } catch (Exception e) {
    System.out.println("Mapping Error");
    e.printStackTrace();
    THE ERROR
    Mapping Errorjava.sql.SQLException: Inconsistent java and sql object types
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
    at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1130)
    at oracle.sql.StructDescriptor.toOracleArray(StructDescriptor.java:823)
    at oracle.sql.StructDescriptor.toArray(StructDescriptor.java:1735)
    at oracle.sql.STRUCT.<init>(STRUCT.java:136)
    at com.custom.callable.CallableArrayTryOut.main(CallableArrayTryOut.java:48)

    You posted this question in the wrong forum section. There is one dedicated to Java that was more appropriate.
    Anyway here is a link that describes what you should do.
    http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/oraarr.htm#i1049179
    Bye Alessandro

  • Passing array of objects from java to oracle.

    Hi,
    We have the following structure in oracle.
    We have a nested table type of varchar2(50).
    type var_tab is table of varchar2(50);
    We have one object type with one member as varchar2 and another one as var_tab type.
    type attribute_obj is object(
    attrib_name varchar2(100)
    ,attrib_val var_tab
    Then we have table type of that object type,
    type table_tab is table of attribute_obj;
    Then we have one object type with one member as varchar2,another member as integer and another one as table_tab type.
    type prod_obj is object(
    pr_name varchar2(100), tb_flag integer
    ,pr_attrib table_tab
    Then we have table type of this object type,
    type prod_tab as table of prod_obj;
    So, the total structure is something like this;
    'OS','OS_NAME', 'Windows'
    'Linux'
    'UNIX'
    'OS_VERSION','XP'
    'RED HAT'
    'SOLARIS'
    so, basically we have
    x prod_tab:=prod_tab();
    x(3):=prod_obj('OS',0,table_tab(attribute_obj('OS_NAME',var_tab('Windows','Linux','UNIX')),attribute_obj('OS_VERSION','XP','RED HAT','SOLARIS'))));
    And this how we call the procedure ---
    all_prod_comb_pkg.sp_main(x)
    The procedure deifinition is -
    procedure sp_main ( p_prod_arr prod_tab);
    Please suggest a way so that we can implement the same structure in Java and then call the procedure using that array of objects.
    regards,
    Dipankar.

    Dipankar,
    There's a separate example of how to map Oracle OBJECTs to JDBC STRUCTs.
    Study that one and combine the two. Not difficult (in my opinion :-)
    Or search the JDBC forum for the words "STRUCT" and "ARRAY".
    (What, you want me to do your coding for you?)
    Good Luck,
    Avi.

  • Passing an array of objects to stored procedure(oracle)

    I have to pass an array of objects to a pl/sql stored proc.
    Its prototype is,
    proc_orderins(ordernum varchar2(14), ct newTask)
    where newTask is an array of objects:
    type task as object ( name varchar2(20),odd varchar2(8),sdd varchar2(8));
    create or replace type newTask as VARRAY(25) OF Task;
    will the following work from the java code :
    public class CriticalTask
    String name,odd,sdd;
    public CrticalTask(String name,String odd,String sdd)
    this.name=name;
    this.odd=odd;
    this.sdd=sdd;
    Object [] ctasks =new Object[7];
    for(i=0;i<7;i++)
    Object=new CrtitcalTask("x","x","x");
    String query="{call proc_orderins(?,?)}";
    CallableStatement cstmt=con.prepareCall(query);
    cstmt.setInt(123);
    cstmt.setObject(ctasks);
    cstmt.execute();
    will the above code work, when I am passing an array?

    Use code tags when you post code.
    I am rather certain that the code you posted will not work.
    Technically you should be able to use the java.sql.Array interface.
    The newest Oracle drivers might support that (you would have to investigate how to use it.)
    It is however possible that it isn't supported. If not then you will have to use one of the Oracle specific classes that is documented in the Oracle jdbc documentation.

  • Oracle ADF Mobile getting array of objects from webservice

    hi,
    i am trying to fetch a certain number of records using a webservice call and then storing in the SQLLite DB in the mobile.
    i understand i can create a data control using the webservice > then?
    my webservice returns an array of objects.
    how can i do that?
    regards,
    ad

    It's fairly easy.
    What I have done is created a WebService Controller (plain java class) which calls the methods (from the WS) programmaticly.
    Example :
    public class WSController {
        private final String WSDataControllerName = "ThisIsTheNameOfMyWebserviceDataControl";
        private List pnames ,ptypes ,params;
        public WSController() {
            super();
        public List getAllActioncodesFromWS()
           //start - WS empty params
            pnames = new ArrayList();
            params = new ArrayList();
            ptypes = new ArrayList();
            pnames.add("findCriteria");
            params.add(null);
            ptypes.add(Object.class);
            pnames.add("findControl");
            params.add(null);
            ptypes.add(Object.class);
            //end - WS empty params
            List actionCodes = new ArrayList();
            try
                GenericType result = (GenericType)AdfmfJavaUtilities.invokeDataControlMethod(WSDataControllerName, null, "findActioncodesView1",pnames, params, ptypes);
                if(result!=null)
                    for (int i = 0; i < result.getAttributeCount(); i++)
                        GenericType row = (GenericType)result.getAttribute(i);
                        Actioncode wd = (Actioncode)GenericTypeBeanSerializationHelper.fromGenericType(Actioncode.class, row);
                        actionCodes.add(wd);
            catch (AdfInvocationException e)
                e.getMessage();
            catch (Exception e)
                e.getMessage();
         return actionCodes;
        }I also defined a Pojo named Actioncode :
    Note that the attribute names are completly the same as the VO from the web service.
    public class Actioncode {
        String Actioncode,Descript1;
        public Actioncode() {
            super();
        public Actioncode(String Actioncode, String Descript1) {
            super();
            this.Actioncode = Actioncode;
            this.Descript1 = Descript1;
        public void setActioncode(String Actioncode) {
            this.Actioncode = Actioncode;
        public String getActioncode() {
            return Actioncode;
        public void setDescript1(String Descript1) {
            this.Descript1 = Descript1;
        public String getDescript1() {
            return Descript1;
    }Since the WS method returns a GenericType, you can 'convert' that object to an POJO.
    Read more about it here :
    http://adf4beginners.blogspot.be/2013/01/adf-mobile-how-to-iterate-over-all-rows.html
    I know the blog post is about iterating over rows in an iterator, but it's just to illustrate how you can work with the GenericType

  • How to pass array of Object in A Procedure using OCCI.......

    I m also trying for How to pass Object to a procedureb using OCCI...
    Steps....
    1. I created A type.....
    2. Then I created a VARRAY using that Type.
    3.After that I have written An Procedure with object as a parameter..
    now using OCCI how do u bind the parameter with this . plz note that using OTT
    i have already created the class representation of above object type i.e class
    four Files Created 1> demo.h 2>registermapping.h
    3> demo.cpp 2>registermapping.cpp
    After I want to Pass the Values in A Vector...
    vctor<full_name *> vect;
    stmt=con->createStatement("BEGIN Add_Object(:1); END;");
    full_name *name1 = new full_name; //Giving the Error here Given below....
    name1->
    name1->
    Through name1 Which Function I will call in which I will Pass a String....
    like
    name1->readSQL("Sanjay"); Or I have to add a function......
    vect.push_back(name1);
    setVector(stmt,1,vect,"FULL_NAME");
    error C2259: 'FullName' : cannot instantiate abstract class
    can u plz suggest me Why this Error is Giving......?
    How to pass the data?
    setFirst_name() and setLast_name() this two function I will add in Demo.cpp which one created automativcally by Using OTT command.....or other way plz tell me Boss ....
    Can u lz Suggest me ASAP....

    hi Nishant ,
    What u have done Now I mm trying ....
    can u Plz Suggest me......
    How to pass and Array of Object in Procedure using OCCI... Doing....
    90% finished Two Error's Are Coming...
    1> If I create the Class then Data Not Inserting table......
    2> If I will create the Class through OTT command.......
    then U can't Instantiate Object It is DIsplying ,this is Abstract Class(PObject)...
    Beco'z the below Method is Not adding Automatically by OTT command which is Pure Virtual Function.....
    But I added this Function Still SAme Error Giving..
    getSQLTypeName(oracle::occi::Environment env, void *schName,
    unsigned int &schNameLen, void **typeName,
         unsigned int &typeNameLen) const
    Plz Suggest me....
    regard's
    sanjay

  • Calling a Procedure which has Array of Objects as arguments (from BPEL)

    Hi,
    I wanted to pass multiple records as arguments to a stored procedure from BPEL.
    We created stored procedure which takes array of Objects as arguments. I invoked it from BPEL. It was successfully compiled and deployed.
    At runtime it is throwing following error.
    <bindingFault xmlns="http://schemas.oracle.com/bpel/extension">
    <part name="code">
    <code>17072</code>
    </part>
    <part name="summary">
    <summary>Error binding the value of a parameter. An error occurred when binding the value of parameter ARG in the SCOTT.TESTPACK.TESTPROC API. Cause: java.sql.SQLException: Inserted value too large for column: "sadfsafsad" Check to ensure that the parameter is a valid IN or IN/OUT parameter of the API. Contact oracle support if error is not fixable.</summary>
    </part>
    <part name="detail">
    <detail>Inserted value too large for column: "sadfsafsad"</detail>
    </part>
    </bindingFault>

    I think you from Sierra Atlantic and you using Beta 3. There was a bug in Beta 3 in using arrays, which got fixed in post Beta3. You got to wait till next release.

  • How can i insert  more clob objects into oracle9i?

    my env:
    os: windows server 2003 ent sp2
    php:=5.2.3
    oracle : 9.0.0.8
    i look at this article :
    http://www.oracle.com/technology/pub/articles/oracle_php_cookbook/fuecks_lobs.html
    but ,i want insert two clob into the oracle ....
    Inserting a LOB
    To INSERT an internal LOB, you first need to initialize the LOB using the respective Oracle EMPTY_BLOB or EMPTY_CLOB functions—you cannot update a LOB that contains a NULL value.
    Once initialized, you then bind the column to a PHP OCI-Lob object and update the LOB content via the object's save() method.
    The following script provides an example, returning the LOB type from the INSERT query:
    <?php
    // connect to DB etc...
    $sql = "INSERT INTO
    mylobs
    id,
    mylob
    VALUES
    mylobs_id_seq.NEXTVAL,
    --Initialize as an empty CLOB
    EMPTY_CLOB()
    RETURNING
    --Return the LOB locator
    mylob INTO :mylob_loc";
    $stmt = oci_parse($conn, $sql);
    // Creates an "empty" OCI-Lob object to bind to the locator
    $myLOB = oci_new_descriptor($conn, OCI_D_LOB);
    // Bind the returned Oracle LOB locator to the PHP LOB object
    oci_bind_by_name($stmt, ":mylob_loc", $myLOB, -1, OCI_B_CLOB);
    // Execute the statement using , OCI_DEFAULT - as a transaction
    oci_execute($stmt, OCI_DEFAULT)
    or die ("Unable to execute query\n");
    // Now save a value to the LOB
    if ( !$myLOB->save('INSERT: '.date('H:i:s',time())) ) {
    // On error, rollback the transaction
    oci_rollback($conn);
    } else {
    // On success, commit the transaction
    oci_commit($conn);
    // Free resources
    oci_free_statement($stmt);
    $myLOB->free();
    // disconnect from DB etc.
    ?>

    Use something like:
    sql = "INSERT INTO mylobs (id, mylob1, mylob2) VALUES
    (mylobs_id_seq.NEXTVAL, EMPTY_CLOB(), EMPTY_CLOB()) RETURNING
    mylob1, mylob2 INTO :mylob_loc1, :mylob_loc2";
    You'll need to allocated two lob descriptors and bind both to the statement.
    -- cj

  • How to create Array type parameter of Oracle 10.2.0.1.0 in java

    I create a collection type with:
    CREATE OR REPLACE
    type TEST_User.T_ARRAY AS TABLE OF VARCHAR2(100);
    and in java code, I use following code to create a parameter of this type, and set it for a procdure
    String[] userMakeArray = new String[]{"V", "N", "A"};
    oracle.sql.ArrayDescriptor descriptor = oracle.sql.ArrayDescriptor.createDescriptor("TEST_User.T_ARRAY", cn); // cn is connection instance to database
    oracle.sql.ARRAY array = new oracle.sql.ARRAY(descriptor, cn, userMakeArray);
    ((oracle.jdbc.OracleCallableStatement)call).setArray(8, array);
    when i use this to call procedure in Oracle 10.1, it work well.
    In Oracle 10.2, it does not work well.
    For test, I can execute procedure well in sql plus, but in java client, I found that array contains three items "Null", while array is correct when conect to 10.1 enviroment.
    does anybody know what's the reason for this.
    thanks a lot.

    Hi,
    Too long to copy/paste here but i have a simpler working example of Nested Table of VARCHAR2 type against 10.2.0.x, in chapter 3 and 8 of my book:
    create or replace type NTab_Vc2 as TABLE of varchar2(30)
    create table NSTableTab (id int, numnt NTab_Num, vc2nt NTab_Vc2, datnt
    NTab_Dat)
    nested table numnt store as NSTabNum,
    nested table vc2nt store as NSTabVc2,
    nested table datnt store as NSTabDat;
    insert into NSTableTab values (1,
    NTab_Num(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
    NTab_Vc2 ('One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten'),NTab_Dat('01-JAN-2003', '02-JAN-2003', '03-JAN-2003', '04-JAN-2003',
    '05-JAN-2003', '06-JAN-2003', '07-JAN-2003', '08-JAN-2003',
    '09-JAN-2003', '10-JAN-2003')
    // The following code snippet retrieves and returns a
    // NTab_Vc2 as a java.sql.Array
    OraclePreparedStatement ps = (OraclePreparedStatement)
    conn.prepareStatement ("SELECT VC2NT FROM NSTableTab
    WHERE ID = ?");
    ps.setNUMBER (1, id[0]);
    OracleResultSet rs = (OracleResultSet) ps.executeQuery();
    Array a = null;
    while (rs.next())
    a = (Array) rs.getObject(1);
    ps.close();
    return a;
    Kuassi, http://db360.blogspot.com/2006/08/oracle-database-programming-using-java_01.html

  • Printing a listing from an array of objects

    I know I'm missing something simple here but for the life of me I can't spot it. The code below should print a list of student names to the screen. At the moment it only prints the last name entered into the array. I will kick myself when I see the answer but can anyone suss this out ? Many thanks for any help.
    // A Program called StudentDetails3.java which inserts student names into an array according to
    // a calculated hash Index and then prints out the name list in this order
    import javax.swing.JOptionPane;
    public class StudentDetails3
    // Member Section
    // Private members
    private static String studentName;
    // Public members
    public static String input = JOptionPane.showInputDialog(" Please enter the number of students in the class : - ");
    public static int maxNum = Integer.parseInt(input);
    public static int hashIndex = 0;
    // Constructor Section
    StudentDetails3 ( String newStudentName )
    studentName = newStudentName.toUpperCase();
    // Method Section
    public int hashCalc()
    int total = 0;
    for( int charNo = 0; charNo < studentName.length(); charNo ++ )
    char letter = studentName.charAt(charNo);
    int asciiVal = letter;
         if( studentName.charAt(charNo) ==' ')
         asciiVal = 0;
         total = total + asciiVal;
    hashIndex = total % maxNum;
    return hashIndex;
    public void output()
    System.out.println(" The student's name and hash index is " + studentName + " " + hashIndex );
    static class DetailsStorage
    // Member Section containing the array into which the student objects will be inserted
    private Object [] array;
    private int current;
    // Constructor
    DetailsStorage ( int noOfStudents )
    array = new Object[ noOfStudents ];
    current = 0;
    // Method for adding name to array
    public void add ( Object StudentDetails3 )
    {  if ( array [ hashIndex] == null )
    array [ hashIndex ] = StudentDetails3;
    else if ( (hashIndex + 1) <= (array.length-1) )
    do
    { hashIndex = ( hashIndex + 1 );
         if ( array [ hashIndex ] == null )
         {   array [ hashIndex ] = StudentDetails3;
         break;
    } while ( (hashIndex + 1) <= (array.length-1) );
         else
              for ( int firstLp = 0; firstLp < array.length; firstLp ++ )
         if ( array [ firstLp ] == null )
         {   array [ firstLp ] = StudentDetails3;
                   break;
    public void printOut ( )
    {   int loop = 0;
    System.out.println ( " Name\t\tCourse " );
    System.out.println ( "____\t\t_________ " );
         for ( loop = 0; loop < array.length; loop ++ )
         System.out.println ( ( ( StudentDetails3 ) array [ loop ] ).studentName );
    // Main Program for testing
    public static void main( String[] args )
    {   String  name;                                              
    // Obtain list of names from the user
    DetailsStorage nameList = new DetailsStorage( maxNum );
    for( int lp = 0; lp < maxNum; lp++ )
    {   name =  JOptionPane.showInputDialog(" Please enter the name of student in full ( e.g. Gareth Edwards )");
    StudentDetails3 newDetails = new StudentDetails3( name );
    newDetails.hashCalc();
         nameList.add ( newDetails );
    newDetails.output();
    nameList.printOut();
    System.exit(0);
    }

    You've made the student name a static field, which means that there's only one for the whole class.
    So the last one you input is the one you use for everybody.

  • How to store java object in oracle

    Hi all,
    is it possible to store jva object in oracle.
    I have defined myClass. It have only data fields ( no methods).
    I make myClass myObject = new myClass();
    How can I store this object in oracle DB.
    Many thanks in advance.

    1.Convert this object into stream of Bytes.
    2.create a new InputStream from these Byte array.
    2.Use the setBinaryStream to set the values inside the table's column.
    3.Store this object as a Blob in the table (column type must be Blob).
    Hope this helps.
    Sudha
    PS:- Somebody explained in this forum how to convert an Object into Byte array .

  • Inserting a record in an Oracle database

    Hi,
    I would appreciate if anyone could provide a code snippet showing how to insert a record into an Oracle 9i database. The columns in the database table have datatypes such as NUMBR, VACHAR2, and DATE. Some of the columns may be null. The input text is in the form of String. The string from the date fields is in the form 'YYYY-MM-DD HH:MI:SS PM' and I have converted these to java.sql.Date objects. How do I deal with nulls?
    Thanks.

    I am having a problem inserting a date field. The input string is in the form YYYY-MM-DD HH:MM PM. I converted the input string to a java.sql.Date object before trying to post the record. However, an example of what gets inserted is: '2001-12-04 12:00 AM' even if the input date string is: "2001-12-04 04:40". In other words, the hour and minute portions do not get inserted correctly.
    Why is this and how can I resovle this? My code is as follows: (try/catch blocks are not shown)
    String m_HireDate = "2001-12-04 04:40 PM"; // Input string.
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm a");
    java.utilDate m_UtilDate = sdf.parse(URLDecoder.decode(m_HireDate);
    java.sql.Date m_SQLDate = new java.sql.Date(m_UtilDate);
    Connection con = DriverManager.getConnection(url,"abc"," abc") ;
    Statement stmt =
    con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
    ResultSet.CONCUR_UPDATABLE) ;
    String sqlselect = "SELECT EMP_ID, FIRST_NAME, MIDDLE_NAME, LAST_NAME, HIRE_DATE, FROM EMP" ;
    ResultSet rs = stmt.executeQuery(sqlselect) ;
    // EMP_ID is the primary key. It has a datatype of NUMBER in the database tabe
    int EMP_ID1 = Integer.parseInt(EMP_ID);
    rs.moveToInsertRow() ;
    rs.updateInt("EMP_ID", EMP_ID1) ;
    rs.updateString("FIRST_NAME", "John" );
    rs.updateString("MIDDLE_NAME", "M" );
    rs.updateString("LAST_NAME", "Smith");
    rs.updateDate("HIRE_DATE" , m_SQLDate); //m_SQLDate is a java.sql.Date object
    rs.insertRow() ;
    Now get the inserted value from SQLPLUS:
    SELECT TO_CHAR(HIRE_DATE, 'YYYY-MM-DD HH:MI PM') FROM EMP WHERE EMP_ID =EMP_ID1;
    The output is: "2001-12-04 12:00 AM"
    Thanks.

  • Reading arrays of objects

    I am new to OCI programming, but have read the manuals on reading objects, but can not figure out how to do what I want to do from that documentation. I am using oracle 9.2.0.7
    I have a package that produces a bunch of data. Currently this data is stored as records in local variables. From my understanding OCI can not read oracle records
    so that I will need to change package to use either varrary or associative arrays. I do not want to place this data into a actual oracle table because the data only has meaning at time package procedure is run and then is out of date for any other purposes. I Only want to read the data that is created in sql packages so that my C program can do other work with that data. It will change data into an XML format that Internet Application will use.
    This is where I am stuck, it is implied that OCI should be able to read these created arrays of objects, but all examples are reading oracle tables that have objects in them. So I would like either an example or some suggestions on how to get started on doing this. So far I have created and oracle object type that has my fields in it. Since I do not know how many records I will be creating when I
    run this package I think I should put data in an associative array.

    Hi
    Yes, you'll need to publish the data somehow. One way to do it is to place the data into a PL/SQL collection; then select from that.
    There's a write up of some examples at http://www.dbasupport.com/oracle/ora9i/cast.shtml
    HTH
    regards Nigel

  • Passing array of objects to the procedure

    Hi I have written a procedure to accept array of objects as input . it worked fine.
    this is the only input parameter in my procedure.
    But now I tried to add an out put parameter of type varchar2 to my procedure to send some return value but it gives me an error
    PLS-00410: duplicate fields in RECORD,TABLE or argument list are not permitted.
    please suggest cant i pass any other arguments when using a record or object array as parameter?
    this is my code
    CREATE OR REPLACE TYPE PREF_OBJ_TYPE as object (
    PREF_CD  varchar2(20),
    USR_ID   VARCHAR2(20),
    PROD_CD  VARCHAR2(50),
    DFLT_PREF_VAL_TX VARCHAR2(250),
    USR_PREF_VAL_TX VARCHAR2(250),
    CRE_USR_ID VARCHAR2(20),
    UPDT_USR_ID VARCHAR2(20) );
    CREATE OR REPLACE TYPE PREF_ARRAY is table of PREF_OBJ_TYPE;
    CREATE OR REPLACE procedure MMM(in_pref PREF_ARRAY,v_err out varchar2 )
    is
    v_prod_dim_nb NUMBER;
    v_usr_dim_nb  NUMBER;
    v_count NUMBER;
    v_err varchar2(50);
    begin
    for i in  in_pref.first.. in_pref.last
    LOOP
    /* Derive the product and user dim numbers */
    select prod_dim_nb into  v_prod_dim_nb from prod_dim where prod_cd=in_pref(i).prod_cd ;
    select usr_dim_nb into v_usr_dim_nb from usr_xref where usr_id=in_pref(i).usr_id and sys_id='ACCESS';
    /* check if the record already exist in usr_prod_pref corresponding to that  user,prod,pref */
    select count(1) into v_count from usr_prod_pref_test where prod_dim_nb=v_prod_dim_nb and usr_dim_nb=v_usr_dim_nb and pref_cd=in_pref(i).pref_cd;
    if v_count=0 then
    BEGIN
    INSERT INTO USR_PROD_PREF_TEST values(v_usr_dim_nb,in_pref(i).pref_cd,v_prod_dim_nb,in_pref(i).DFLT_PREF_VAL_TX,in_pref(i).usr_PREF_VAL_TX,'Active',NULL,
    in_pref(i).cre_usr_id,sysdate,in_pref(i).updt_usr_id,NULL);
    END;
    else
    update USR_PROD_PREF_TEST set USR_PREF_VAL_TX=in_pref(i).USR_PREF_VAL_TX,DFLT_PREF_VAL_TX=in_pref(i).DFLT_PREF_VAL_TX,UPDT_USR_ID=in_pref(i).updt_usr_id,updt_dt=sysdate,cre_usr_id=in_pref(i).cre_usr_id where
    prod_dim_nb=v_prod_dim_nb and usr_dim_nb=v_usr_dim_nb and pref_cd=in_pref(i).pref_cd;
    end if;
    end loop;
    commit;
    v_err:='abc';
    end;
    /Edited by: raj_fresher on Oct 9, 2009 6:56 AM

    okay i was wondering.... if he knew the error code in advance i thought user defined messages have numbers like -20000 to 209999 or something like that..
    neverthless one final question ....
    Now that my procedure is ready .. i have 2 final questions for this thread
    1) is my usage of errorcode and error message to return to the calling application correct?
    2) how to test this procedure in sql plus (or) toad?
    i mean how to call?
    exec modify_user_preferences(value, ?????(what should  i write here for output variable ) ) ?? i want to check what value is it returning?
    CREATE OR REPLACE procedure MODIFY_USER_PREFERENCES2(in_pref PREF_ARRAY,v_status_message out varchar2  )
    is
    v_prod_dim_nb NUMBER;
    v_usr_dim_nb  NUMBER;
    v_count NUMBER;
    v_product_exception EXCEPTION;
    v_user_exception EXCEPTION;
    p_error_code varchar2(50);
    p_error_msg varchar2(50);
    begin
    for i in  in_pref.first.. in_pref.last
    LOOP
    /* Derive the product and user dim numbers */
    begin
    select prod_dim_nb into  v_prod_dim_nb from prod_dim where prod_cd=in_pref(i).prod_cd ;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            p_error_code := sqlcode;
            p_error_msg := SQLERRM;
            raise v_product_exception;
    end;
    BEGIN
    select usr_dim_nb into v_usr_dim_nb from usr_xref where usr_id=in_pref(i).usr_id and sys_id='ACCESS';
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            p_error_code := sqlcode;
            p_error_msg := SQLERRM ;
            raise v_product_exception;
          raise v_user_exception;
    END;
    /* check if the record already exist in usr_prod_pref corresponding to that  user,prod,pref */
    select count(1) into v_count from usr_prod_pref_test where prod_dim_nb=v_prod_dim_nb and usr_dim_nb=v_usr_dim_nb and pref_cd=in_pref(i).pref_cd;
    if v_count=0 then
    BEGIN
    INSERT INTO USR_PROD_PREF_TEST values(v_usr_dim_nb,in_pref(i).pref_cd,v_prod_dim_nb,in_pref(i).DFLT_PREF_VAL_TX,in_pref(i).usr_PREF_VAL_TX,'Active',NULL,
    in_pref(i).cre_usr_id,sysdate,in_pref(i).updt_usr_id,NULL);
    END;
    else
    update USR_PROD_PREF_TEST set USR_PREF_VAL_TX=in_pref(i).USR_PREF_VAL_TX,DFLT_PREF_VAL_TX=in_pref(i).DFLT_PREF_VAL_TX,UPDT_USR_ID=in_pref(i).updt_usr_id,updt_dt=sysdate,cre_usr_id=in_pref(i).cre_usr_id where
    prod_dim_nb=v_prod_dim_nb and usr_dim_nb=v_usr_dim_nb and pref_cd=in_pref(i).pref_cd;
    end if;
    end loop;
    commit;
    v_status_message:='SUCCESS';
    exception
    when v_product_exception then
    v_status_message:= 'invalid product code  '||p_error_code||p_error_msg;
    when v_user_exception then
    v_status_message:= 'invalid user'||p_error_code||p_error_msg;
    end;
    /Edited by: raj_fresher on Oct 9, 2009 7:33 AM

  • How to return array of object

    public class A{
    public class B{
    publc C[] sample()
    int i=0;
    ResultSet rset = s.executeQuery("select name, id  from emp ");
    while(rs.next()){
    name = rset.getString("nam");
    id = rset.getInt("id");
    c.setName(name )
    c[i].setId(id)
    return c[]
    public class C{
    // here i have getter and setter metod for name & id
    When I try to return the object c[]..i am getting "cannot conver from C to C[]".
    Can u pls help me, how to return array of object and how to get name and id values in other class using this array object
    Thanks for ur help

    public class Starting{
    public long empID;
    Data data = new Data();
    Value[] value;
    int count = 0;
         public static void executeDe(){
              value = new Value[100]
              try{
                     data.getDetails()
                     processDetails(value);
                   }catch(Exception e){e.printStackTrace();}
         public static void processDetails(Value[] value){
         count = data.i;
              int i;
              for(i=0;i<count;i++){
                  empID=value.getempID(); \\ here i am not getting all values..... am getting only last value of the array
    public class Data{
    public long empID;
    public int i=0;
    static Value[] value = new Value[100];
    public static Value[] getDetails(){
    Connection con=null;
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    con=DriverManager.getConnection("jdbc:oracle:thin:@" + hostname + ":1521:" + sid, user, password);
    System.out.println(" conn " + con);
    System.out.println("");
    Statement s=con.createStatement();
    try{
         ResultSet rset = s.executeQuery("select EMPID from Employee ");
         while(rset.next()){
    empID = rset.getLong("EMPID");
    value[i].setCycleID(cy_i);
    i++;
         rset.close();
         con.close();
    }catch (SQLException sqle){sqle.printStackTrace();}
         finally{
              try{
              s.close();
         con.close();
              }catch(SQLException e){e.printStackTrace();}
    catch(Exception e){e.printStackTrace();}
    return value;
         public class Value {
         public static long cycleID;
              public static void setempID(long empID) {
                   Value.empID = empID;
              public static long getempID() {
                   return empID;
    This is my actual code..... I am able to set the values in Value class from Data class using getDetails() method, which is returning array of value object.
    In Starting class, I am trying to get values using value[i].. i am getting last value of the array. This is my actual problem... here i want to get all values.
    Please help me how to resolve this.

Maybe you are looking for

  • Heap space error

    I have written an XSLT for some data XML. I am using a simple Java code to run this transform. The code is as given below import java.io.File; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.Documen

  • Using App Store in China

    I recently bought an iPad thru the Chinese Apple website. When I try to buy apps in the App Store, I get a bubble saying I'm not allowed to do this; I must enter thru the US Apple website. However, even if I start in the US website, as soon as I hit

  • Output not printing correctly for BI Publisher report.

    Hi All, We have a BI Publisher report which is printing correctly on one printer but not on another printer. The top and right side of the output are getting truncated. Printer type for both the printer is same that is "--PASTA Universal Printer Type

  • Setting proprietes - initial view - pages panel and page - single page - fit page

    How I can set ADOBE for save all the files with the above mentioned proprietes ? I want set this as default. Thanks in advance for your assistance and best regards. Roberto Giussani [email protected]

  • Time Capsule With Windows Problems

    Hi, I have a problem with my TC, i read every thread here and in other forums. I spent Days and nights try to figure it out but with no luck at all. I desperate here as i just paid $500 to buy the TC and isn't working. *The Problem:* 1.I configured m