Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> VARRAY size limitation problems (>4095)
Hello NG,
need help by the following problem:
We've been using VARRAYs and NestedTables thru Java(JDBC) to upload
data to a table.
Unfortunately, if we make the VARRAY size (or the row size in the
NestedTable)
larger than 4095, the following happens:
Every block of 4095 entries is cut off and only the first entries were send to the table.
Example:
We want to store a VARRAY of 8200 rows,
but only the first 10 entries are stored in the table!
(8200 - 4095 - 4095 = 10)
//--------------------------------------------------------------------Here's the used source (original Oracle-docu):
import java.sql.*;
import oracle.sql.*; import oracle.jdbc.oracore.Util; import oracle.jdbc.driver.*;
public class ArrayExample
{
public static void main (String args[]) throws Exception
{
// Register the Oracle JDBC driver
DriverManager.registerDriver(new
oracle.jdbc.driver.OracleDriver());
// Connect to the database
// You need to put your database name after the @ symbol in
// the connection URL.
//
// The sample retrieves an varray of type "NUM_VARRAY" and
// materializes the object as an object of type ARRAY.
// A new ARRAY is then inserted into the database.
// Please replace hostname, port_number and sid_name with
// the appropriate values
Connection conn =
DriverManager.getConnection("jdbc:oracle:oci8:scott/tiger_at_myDatabase");
// It's faster when auto commit is off
conn.setAutoCommit (false);
// Create a Statement
Statement stmt = conn.createStatement ();
try
{
stmt.execute ("DROP TABLE Rvarray_table"); stmt.execute ("DROP TYPE Rnum_varray");}
// the above drop statements will throw exceptions // if the types and tables did not exist before }
stmt.execute ("CREATE TYPE Rnum_varray AS VARRAY(8200) OF
NUMBER(12, 2)");
stmt.execute ("CREATE TABLE Rvarray_table (col1 Rnum_varray)");
//now insert a new row
// create a new ARRAY object
int elements[] = new int[8200];
for(int i=0; i<8200; i++)
{
elements[i] = i * 10;
}
ArrayDescriptor desc =
ArrayDescriptor.createDescriptor("RNUM_VARRAY", conn);
ARRAY newArray = new ARRAY(desc, conn, elements);
PreparedStatement ps =
conn.prepareStatement ("INSERT INTO Rvarray_table VALUES (?)");
((OraclePreparedStatement)ps).setARRAY (1, newArray);
ps.execute ();
rs = stmt.executeQuery("SELECT * FROM Rvarray_table"); showResultSet (rs);
} public static void showResultSet (ResultSet rs) throws SQLException {
line++; System.out.println("Row " + line + " : "); ARRAY array = ((OracleResultSet)rs).getARRAY (1); System.out.println ("Array is of type " + array.getSQLTypeName() ); System.out.println ("Array element is of type code" + array.getBaseType()); System.out.println ("Array is of length " + array.length()); // get Array elements BigDecimal[] values = (BigDecimal[]) array.getArray(); for (int i=0; i<values.length; i++) { BigDecimal value = values[i]; System.out.println(">> index " + i + " = " + value.intValue()); } } } } // -------------------------------------------------------------------- The Oracle version being used: Oracle server 8.1.7 Driver for connection: jdbc:oracle:oci8
Any Suggestions would be greatly appreciated, Thank-You in Advance.
Christian Kropf (germany) Received on Fri Apr 19 2002 - 07:19:42 CDT
![]() |
![]() |