Está pasando toda la información de conexión como un solo valor; equivalente a esto desde una línea de comando:
sqlplus "sys as sysdba/[email protected]<connect_string>"
que obtendría la misma respuesta de imprimir la ayuda de inicio de sesión de SQL*Plus. También tiene su contraseña en el lugar equivocado, pero no llega tan lejos. Desde una línea de comando esto funcionaría:
sqlplus "sys/tiger" "as" "[email protected]<connect_string>"
por lo que debe pasar 5 argumentos a ProcessBuilder
, algo como:
String sqlCmd = "sqlplus";
String arg1 = "sys/tiger";
String arg2 = "as";
String arg3 = "[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname)(Port=PORT ID))(CONNECT_DATA=(SID=SID)))";
String arg4 = fileName;
...
ProcessBuilder pb = new ProcessBuilder(sqlCmd, arg1, arg2, arg3, arg4);
Esto solo funcionará si su entorno está configurado para permitir la conexión remota como sysdba
. Hacer cualquier cosa como sys
debería ser muy raro, y tener un script que desea ejecutar como sys
parece lo suficientemente inusual como para que un contenedor de Java parezca excesivo, y hace que parezca que podría conectarse como sys
rutinariamente, lo cual no es una buena idea, pero tal vez esto sea solo un ejercicio de aprendizaje.