SQLLDR使用Java / Spring加载数据问题较少加载398

时间:2019-03-07 16:19:27

标签: java spring batch-file oracle11g sql-loader

我用Java制作了一个执行bat的网站,因为我们将数据批量加载到Oracle。我已经使用SQLLDR命令创建了一个批处理文件,以将txt文件的内容(在Java Web中上传)加载到Oracle表中(也运行SP)。

我的批处理是一个模板,数据输入Java:

CD E:\temp E: SQLLDR login/password@database control=%1 log=%2 DATA=%3
ERRORS=999999

下面是CTL命令的示例(我用Java创建CTL):

  

选项(SKIP = 1)在文件'B3475720190305181118.txt'中加载数据TRUNCATE   将空白保留到以“ |”结尾的表DGOV_DATAENTRY_TMP字段中   跟踪NULLCOLS(TIPDOC,CODDOC,FLG_DIRECCION,FLG_EMAIL   ,FLG_TELEFONO,USU_SOLICITUD,ID_SOLICITUD)


我知道我的CTL和批处理文件都可以,因为当我仅执行BAT(无Java)时,它将加载所有数据。但是在我的网站上没有。

我有问题。当数据少于398寄存器时,不加载:

WEB OUTPUT DOESNT INSERT

但是,如果数据大于399,则会使用Java代码加载。但是我看到它加载了总计198个寄存器。

WEB OUTPUT CONSOLE JAVA

这也是LOG文件(不插入数据时):

LOG FILE, sorry in spanish

Java代码:

    public static int ejecutarBat(List<String> listComan) {

        int result=-1;

        logger.info("Iniciando ejecucion .BAT");
        ProcessBuilder processBuilder = new ProcessBuilder(listComan);                      
            try {

                Process process = processBuilder.start();

                StringBuilder output = new StringBuilder();

                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(process.getInputStream()));

                String line;
                while ((line = reader.readLine()) != null) {
                    output.append(line + "\n");
                }

                int exitVal = process.waitFor();
                if (exitVal == 0) {
                    logger.info(output.toString());

                } else {
                    //abnormal...
                }
                logger.info("Respuesta: "+exitVal);
                result=exitVal;
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return result;
    }

0 个答案:

没有答案