This is not possible, see Accessing PL / SQL Index Tables :
Oracle JDBC does not support RAW, DATE, and PL / SQL RECORD as item types.
I would probably use a custom (global, not batch) object type, for example:
CREATE TYPE t_all_record AS OBJECT ( x_object_type_id number, x_object_name varchar2(100), x_object_id varchar2(70), x_audit_timestamp timestamp(6), x_payload clob ) / CREATE TYPE t_all_records IS TABLE OF t_all_record /
specify the type table in your package (t_all_records instead of tt_all_tab) and fill it like this:
procedure get_data_Q1(x_object_id in varchar2 , x_all_type out t_all_records ) AS begin SELECT t_all_record(O.object_type_id,O.object_name,O.object_id,A.audit_timestamp,P.payload) BULK COLLECT INTO x_all_type FROM APPLICATION APP, EXCEPTIONS E,MASTER_AUDIT A,MODULE_TYPE M,OBJECT_TYPE O,PAYLOAD P WHERE ( A.MODULE_TYPE_ID = M.MODULE_TYPE_ID ) AND ( M.APPLICATION_ID = APP.APPLICATION_ID ) AND ( A.OBJECT_TYPE_ID = O.OBJECT_TYPE_ID ) AND ( O.OBJECT_ID = x_object_id ) end get_data_Q1;
The result will be used from java as follows:
package tests.jdbc; import java.sql.Array; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSetMetaData; import java.sql.Struct; import java.sql.Types; import oracle.sql.StructDescriptor; public class OracleTableOfResult { public static void main(String...a) throws Exception { Class.forName("oracle.jdbc.OracleDriver"); Connection connection = DriverManager.getConnection("jdbc:oracle:thin:<USER>/<PASS>@<DATABASEHOST>:1521:<SERVICE>"); final String typeName = "T_ALL_RECORD"; final String typeTableName = "T_ALL_RECORDS";
But in the end, it is doubtful whether it's worth it when you can use your query in a simple sql expression as a prepared statement ...