Мне пришлось сделать это самому недавно и собрать для этого скрипт Groovy.Вам нужно изменить детали подключения и убедиться, что у вас есть драйверы базы данных Oracle на вашем classpath
import groovy.sql.Sql
// Change the following to your requirements ...
def extractRoot = "extracted-classes/" // Directory to extract classes into
def user = 'SCOTT' // Schema user
def password = 'tiger' // Yes, it's the password
def host = 'localhost' // Database host
def sid = 'orcl' // Database SID
def port = 1521 // Database listener port
def saveBlob(blob, root, name, extension) {
def byteStream = blob.getBinaryStream()
def bytes = new byte[blob.length()]
byteStream.read(bytes)
def dir = root + name.replaceAll(/\/[^\/]+$/, '')
if (dir != name) {
new File(dir).mkdirs()
}
def f = new File(root + name + extension)
println "Writing ${f.getCanonicalPath()}"
f.delete()
f.withOutputStream { s ->
s.write(bytes)
}
}
sql = Sql.newInstance("jdbc:oracle:thin:@${host}:${port}:${sid}", user,
password, 'oracle.jdbc.driver.OracleDriver')
sql.eachRow("select name from all_java_classes where owner = ${user}") {
sql.call('''
declare
b blob;
begin
dbms_lob.createtemporary(b, FALSE);
dbms_java.export_class(?, ?, b);
? := b;
end;''', [it.name, user, Sql.BLOB]) { blob ->
saveBlob(blob, extractRoot, it.name, '.class')
}
}
sql.eachRow("select dbms_java.longname(object_name) \"name\" from all_objects where object_type = \'JAVA RESOURCE\' and owner = ${user}") {
sql.call('''
declare
b blob;
begin
dbms_lob.createtemporary(b, FALSE);
dbms_java.export_resource(?, ?, b);
? := b;
end;''', [it.name, user, Sql.BLOB]) { blob ->
saveBlob(blob, extractRoot, it.name, '')
}
}