This question is related to my original issue How to return an array from Java to PL/SQL ?, but is a more specific.
I have been reading Oracle Database JDBC Developer's Guide and
- Creating ARRAY objects
- Server-Side Internal Driver
- oracle.jdbc.OracleConnection
- oracle.jdbc.OracleDriver
but I still fail to write a minimum code where I can create ARRAY using
ARRAY array = oracle.jdbc.OracleConnection.createARRAY(sql_type_name, elements);
as instructed in Creating ARRAY objects.
I'm using Oracle Database JVM.
I have tried following:
Example 1
create or replace type widgets_t is table of varchar2(32767);
/
create or replace and compile java source named "so20j1" as
public class so20j1 {
public void f1() {
String[] elements = new String[]{"foo", "bar", "zoo"};
oracle.sql.ARRAY widgets =
oracle.jdbc.OracleConnection.createARRAY("widgets_t", elements);
}
};
/
show errors java source "so20j1"
Fails with:
Errors for JAVA SOURCE "so20j1":
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 so20j1:4: non-static method
createARRAY(java.lang.String,java.lang.Object) cannot be
referenced from a static context
0/0 1 error
0/0 ^
0/0 oracle.sql.ARRAY widgets =
oracle.jdbc.OracleConnection.createARRAY("widgets_t", elements);
Example 2
create or replace type widgets_t is table of varchar2(32767);
/
create or replace and compile java source named "so20j2" as
public class so20j2 {
public void f1() {
String[] elements = new String[]{"foo", "bar", "zoo"};
oracle.jdbc.OracleDriver ora = new oracle.jdbc.OracleDriver();
java.sql.Connection conn = ora.defaultConnection();
oracle.sql.ARRAY widgets = conn.createARRAY("widgets_t", elements);
}
};
/
show errors java source "so20j2"
Fails with:
Errors for JAVA SOURCE "so20j2":
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 so20j2:6: cannot find symbol
0/0 symbol : method createARRAY(java.lang.String,java.lang.String[])
0/0 1 error
0/0 oracle.sql.ARRAY widgets = conn.createARRAY("widgets_t",
elements);
0/0 ^
0/0 location: interface java.sql.Connection
Disclaimer: I'm not a Java programmer (yet).
Based on answers of Affe and Chris Mazzola I have succeeded to build two examples that compile in Oracle 11g R2 database.
Example based on Affe's answer
Example based on Chris Mazzola's answer
Just to mention that in Java 1.6 you have
connection.createArrayOf(..)
, which is standard.You're on the right track with #2, but you can't create an oracle Array from a connection of type java.sql.Connection. It has to be an OracleConnection to be able to use those methods.