Java вызывает хранимую процедуру Oracle SQL с помощью varchar IN / OUT.ORA-06502: PL / SQL: ошибка числового значения или значения: слишком маленький буфер строки символов - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть хранимая процедура с varchar, которая вызывается с помощью java

Хранимая процедура SP_Materials

create or replace PROCEDURE SP_Materials(
   ITEM_ID IN VARCHAR2,
   ITEM_DESC OUT VARCHAR2
)AS
BEGIN
     IF (ITEM_ID = '01') THEN
        ITEM_DESC := 'Hammer';
     END IF;
     IF(ITEM_ID = '02') THEN
        ITEM_DESC := 'Nail';
     END IF;
END SP_Materials;

Вот что я пробовал вJAVA

    try {
        CallableStatement callableStatementReturn = null;
        String callableStatement = "{call SP_Materials(?,?)}";
        Connection dbConn =
            DriverManager.getConnection("jdbc:oracle:thin:@10.20.30.40:1111:SID1", "user", "pass");
        callableStatementReturn = dbConn.prepareCall(callableStatement);
        callableStatementReturn.setString(1, "01");
        callableStatementReturn.registerOutParameter(2, java.sql.Types.VARCHAR,1000);
        callableStatementReturn.executeQuery();

        System.out.println( callableStatementReturn.getCharacterStream(2).read());

    } catch (Exception e) {
        e.printStackTrace();
    }

Ошибка:

java.sql.SQLException: ORA-06502: PL / SQL: ошибка числа или значения: слишком маленький буфер строки символов ORA-06512: at«FUSION.SP_MATERIALS», строка 8 ORA-06512: в строке 1

в oracle.jdbc.driver.T4CTTIoer11.processError (T4CTTIoer11.java:494) в oracle.jdbc.driver.T4CTTIoerer TcessToer11.pro.java: 446) на oracle.jdbc.driver.T4C8Oall.processError (T4C8Oall.java:1054) на oracle.jdbc.driver.T4CTTIfun.receive (T4CTTIfun.java:623) на oracle.jdbc.driver.T4CTFT4CTTIfun.java:252) в oracle.jdbc.driver.T4C8Oall.doOALL (T4C8Oall.java:612) в oracle.jdbc.driver.T4CCallableStatement.doOall8 (T4CCallableStatement.java:223Tall.ladlori.dolo.dolod.Olad.Olad.Old.dolod.Olad.Old.dolod.Old.Od.dolod.Od.dolod.Od.dolod.Od.dodo.Od.dolod.Od.dodo.Od.dodo.Od.dolod.Od.dolod.Od.dolod.Old.dodo.Od.dolod.Od.dolod.Od.dolod.Od.dolod.Od.dolod.Od.dolod.Od.dolod.Od.dolod.Old.dolod.Olad.Old.dolod.Olad.(T4CCallableStatement.java:56) в oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:907) по адресу oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout (OracleStatement.java:1119) по адресу oracle.jdbc.driver.OraclePreparedStatement.executeInternal (OraclePreparedStatement.la.ri.ra.tri.d.ri.t.executeInternal (T4CCallableStatement.java:1300) по адресу oracle.jdbc.driver.OraclePreparedStatement.executeQuery (OraclePreparedStatement.java:3822) по адресу oracle.jdbc.driver.OraclePreparedStatementWrapper.execumentWrage.travel_RackStation.java: 71) Причина: ошибка: 6502, позиция: 0, Sql = BEGIN SP_Materials (: 1,: 2);END ;, OriginalSql = {call SP_Materials (?,?)}, Ошибка Msg = ORA-06502: PL / SQL: ошибка числового значения или значения: слишком маленький буфер символьной строки ORA-06512: в "FUSION.SP_MATERIALS", строка 8 ORA-06512: в строке 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...