I have something kind complicated to do and I want to know if it is possible.
I want to call a stored function using "Dotconnect For Oracle" and here is the function definition :
Code: Select all
FUNCTION GET_PATTERN_FOR_JAVA(p_code IN VARCHAR2,
p_loc_id IN LOCATIONS.id%TYPE,
p_num_seq OUT NUMBER,
p_pattern_name OUT VARCHAR2,
p_result OUT TO_COD,
p_commentaire OUT VARCHAR2) RETURN VARCHAR2;
Code: Select all
CREATE OR REPLACE TYPE CELMAN."TO_COD" AS TABLE OF O_COD;
CREATE OR REPLACE TYPE CELMAN.O_COD AS OBJECT
(field_id NUMBER,
field_name VARCHAR2(64),
val VARCHAR2(1000),
LENGTH NUMBER,
TYPE VARCHAR2(30),
format VARCHAR2(128),
seq VARCHAR2(128),
flag_check_ok VARCHAR2(1),
msg_error VARCHAR2(1000)
);
Code: Select all
statement = connection.prepareCall("{CALL ? := PATTERN_CONTROL_PKG.GET_PATTERN_FOR_JAVA(?, ?, ?, ?, ?, ?) }");
statement.registerOutParameter(1, OracleTypes.VARCHAR);
statement.setString(2, value);
statement.setLong(3, id);
statement.registerOutParameter(4, OracleTypes.NUMBER);
statement.registerOutParameter(5, OracleTypes.VARCHAR);
statement.registerOutParameter(6, OracleTypes.ARRAY, "TO_COD");
statement.registerOutParameter(7, OracleTypes.VARCHAR);
statement.executeQuery();
if (statement.getString(1).equals("TRUE")) {
pattern = new PatternEntity(value, statement.getString(5), statement.getInt(4));
ARRAY recordsTab = (ARRAY)statement.getObject(6);
rs = recordsTab.getResultSet();
int ind;
RecordEntity record;
while (rs.next()) {
record = new RecordEntity();
STRUCT struct = (STRUCT) rs.getObject(2);
StructDescriptor descr = struct.getDescriptor();
ResultSetMetaData md = descr.getMetaData();
ind = 1;
for (Object att : struct.getAttributes()) {
if (md.getColumnName(ind).equalsIgnoreCase("field_id")) {
record.setId(((BigDecimal) att).longValue());
} else if(md.getColumnName(ind).equalsIgnoreCase("field_name")) {
record.setName((String) att);
} else if(md.getColumnName(ind).equalsIgnoreCase("val")) {
record.setVal((String) att);
} else if(md.getColumnName(ind).equalsIgnoreCase("length")) {
record.setLenght(((BigDecimal) att).longValue());
} else if(md.getColumnName(ind).equalsIgnoreCase("type")) {
record.setType((String) att);
} else if(md.getColumnName(ind).equalsIgnoreCase("format")) {
record.setFormat((String) att);
} else if(md.getColumnName(ind).equalsIgnoreCase("seq")) {
record.setSeq((String) att);
} else if(md.getColumnName(ind).equalsIgnoreCase("flag_check_ok")) {
record.setOk(((String) att).equals("Y") ? true : false);
} else if(md.getColumnName(ind).equalsIgnoreCase("msg_error")) {
record.setErrorMessage((String) att);
}
ind++;
}
pattern.addRecordInList(record);
}
Thanks.