У меня есть хранимая процедура с 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