执行存储过程时出现Oracle错误:ORA-06502:PL / SQL:数字或值错误

时间:2017-03-08 22:44:53

标签: java angularjs oracle

这是完整的错误:

Code : -6502
Message : ORA-06502: PL/SQL: numeric or value error: character string buffer too smallORA-06512: at "MYDATABASE"

这是我在java服务中执行该过程的方法:

public String[] execpross_p_hra_int_population_trim () throws SQLException, Exception {
    Connect("DBALIAS");

    String SQL = "{call EDD_CONFID.P_HRA_INT_POPULATION_TRIM (?, ?)}";
    CallableStatement cs = conn.prepareCall (SQL);

    String status[];
    status = new String[2];

    Integer P_CODEERREUR = 0;
    String P_TEXTEERREUR = null;

    try {

        cs.registerOutParameter(1, java.sql.Types.INTEGER);
        cs.registerOutParameter(2, java.sql.Types.VARCHAR);

       cs.executeUpdate();
    }
    catch (SQLException e) {
      System.out.println("Erreur SQL : "+e);
    }
    finally {

       P_CODEERREUR = cs.getInt(1);
       P_TEXTEERREUR = cs.getString(2);

       cs.close();
    }

    status[0] = P_CODEERREUR.toString();
    status[1] = P_TEXTEERREUR;
    return status;

}

我正在使用正确的JDBC驱动程序(12.1.0.2.0)

经过大量研究后,这似乎是一个“语言环境”问题。因为我的基地是用法语设置的。我尝试添加本地甚至是Oracle提供的国际化java库。但似乎没有任何效果。

我无法真正调试库存过程,因为我没有这样做,但是当我用SQLDevelopper执行它时,一切看起来都很好。

现在我有一些奇怪的行为,在我的开发环境中,每当我启动服务时,我都会遇到同样的错误,但是几分钟后它就会开始正常运行而没有错误。这怎么可能呢?

所以我的结论到目前为止,要么我需要找到一种方法来使用NLS_LANG设置(我真的不明白如何在我的情况下使用它)或者我的数据库中有一些不兼容的数据。但我不能确定它。

我知道这是一个特定的问题,我不是在寻找直接的解决方案,只要你们能帮助我朝着正确的方向前进?因为我在这里很迷茫。

0 个答案:

没有答案