Я пытаюсь создать объект массива Java (java.sql.Array), используя массив объектов.Мне нужно передать этот массив Java в хранимую процедуру PLSQL.
conn = ConnectionManager.getConnection();
JournalBean[] journal = listJournal.toArray(new JournalBean[listJournal.size()]);
final Array sqlArray = conn.createArrayOf("CHMCR.PACK_CHM_CR.FICHIER_CR_TYPE", journal);
cstmt = conn.prepareCall("{call CHMCR.PACK_CHM_CR.CHARGEMENT_CR(?,?,?,?,?)}");
cstmt.setArray(1,sqlArray);
cstmt.setString(2, fileName);
cstmt.registerOutParameter(3, oracle.jdbc.OracleTypes.NUMBER);
cstmt.registerOutParameter(4, oracle.jdbc.OracleTypes.NUMBER);
cstmt.registerOutParameter(5, oracle.jdbc.OracleTypes.VARCHAR);
cstmt.executeUpdate();
conn.commit();
однако, когда я пытаюсь создать этот массив, используя метод (connection.createArrayOf), я получаю следующее исключение:
java.sql.SQLException: Fonction non prise en charge
at oracle.jdbc.driver.PhysicalConnection.createArrayOf(PhysicalConnection.java:9283)
это мой JournalBean:
public class JournalBean implements Serializable, SQLData {
private static final long serialVersionUID = 2199201954799483472L;
private int idCr;
private int idChargement;
private String numAutorisation;
private String version;
@Override
public String getSQLTypeName() throws SQLException {
return "FICHIER_CR_TYPE";
}
@Override
public void readSQL(SQLInput stream, String typeName) throws SQLException {
idCr = stream.readInt();
...
}
@Override
public void writeSQL(SQLOutput stream) throws SQLException {
stream.writeInt(idCr);
...
}
}
это мой новый DDL (создание типа в базе данных с использованием CREATE TYPE):
create or replace TYPE CR_TYPE AS OBJECT
( ID_CR NUMBER ,
ID_CHARGEMENT NUMBER ,
NUM_AUTORISATION VARCHAR2(24 BYTE),
VERSION NUMBER
) ;
, затем создание типа таблицы:
CREATE OR REPLACE TYPE FICHIER_CR_TYPE
AS VARRAY(1000) OF CR_TYPE;
процедура имеетстал:
create or replace PACKAGE PACK_CHM_CR
IS
PROCEDURE CHARGEMENT_CR(
P_FICHIER_CR IN OUT FICHIER_CR_TYPE,
p_nom_fichier IN VARCHAR2,
p_id_chargement OUT NUMBER,
NMES OUT NUMBER,
LMES OUT VARCHAR2);
END PACK_CHM_CR;
Я использую Oracle 11g, Java 6 и я пробовал ojdbc14 и ojdbc6.