В вашем коде вы запускаете команду sqlplus
в цикле, поэтому вы должны завершить каждую команду (используя выход для выхода из sqlplus).
Если вы хотите вызвать много сценариев для одного экземпляра sqlplus, то, возможно, вы сможете создать «на лету» сценарий, содержащий такие команды, как:
onTheFlyAcript.sql
@createtable.sql <your params>
@insertvalue.sql <your params>
exit;
Так что в принципе вы можете сделать что-то вроде:
try {
Printwriter out = new PrintWriter(new FileWriter("D:/Test/onTheFlyScript.sql"));
for (int i = 0; i<list_files.length;i++){
script_location = "@" + list_files[i].getAbsolutePath();
out.println("START script_location");
}
out.close();
} catch (IOException e){
e.printStackTrace();
}
// note that this command is not in the loop, it's just for running the new script you've created
processBuilder = new ProcessBuilder
("sqlplus","user56/password", "D:/Test/onTheFlyAcript.sql");
Это, вероятно, придется отлаживать, но идея в том, что вместо того, чтобы выполнять все ваши скрипты один за другим с sqlplus, вы создаете новый скрипт, который содержит вызовы для всех ваших скриптов.
Теперь вы можете удалить команду exit
sqlplus из всех ваших сценариев, поскольку вам не нужно выходить из sqlplus (только в onTheFlyScript.sql)