in DB:
create or alter procedure java_split (
dummy blob SUB_TYPE TEXT,
delimiter varchar(10)
) returns (item varchar(60))
external name 'org.firebirdsql.fbjava.examples.fbjava_example.FbSplit.split()'
engine java;
Java:
publicclassFbSplit {
publicstaticExternalResultSetsplit() throwsException {
finalProcedureContextcontext = ProcedureContext.get();
returnnewExternalResultSet() {
ValuesMetadataoutMetadata = context.getOutputMetadata();
ValuesoutValues = context.getOutputValues();
ValuesinputValues = context.getInputValues();
String[] items_list = null;
intitem_index;
@Overridepublicbooleanfetch() throwsException {
if (items_list == null) {
java.lang.Objectblob_object = inputValues.getObject(1);
// FBBlob blob = (FBBlob) blob_object;java.sql.Blobblob = (java.sql.Blob) blob_object;
byte[] bytes_data = blob.getBytes(1, (int) (blob.length())); // TO SLOWStringblob_string = newString(bytes_data);
items_list = blob_string.split(inputValues.getObject(2).toString());
}
if (item_index < items_list.length) {
outValues.setObject(1, items_list[item_index]);
item_index++;
returntrue;
}
returnfalse;
}
};
}
}then call
select*from java_split(6000000 characters length blob, ',')
40 sec execution time
but if I call from standalone java application ~1-2 sec
env:
java 8
jaybird 2.2.10
in DB:
Java:
then call
env:
java 8
jaybird 2.2.10