gpt4 book ai didi

java - 调用 Oracle 存储过程抛出由 : java. sql.SQLException 引起的异常:无效的列类型:1111

转载 作者:行者123 更新时间:2023-12-02 09:03:19 25 4
gpt4 key购买 nike

我使用 Spring SimpleJdbcCall 调用此 Oracle 存储过程
代码抛出“由以下原因引起:java.sql.SQLException:无效的列类型:1111”

        org.springframework.jdbc.UncategorizedSQLException: CallableStatementCallback; 
uncategorized SQLException for SQL [{call O_XEROX_PRNT_PRT(?, ?)}]; SQL state [99999]; error code [17004]; Invalid column type: 1111;
nested exception is java.sql.SQLException: Invalid column type: 1111

这是存储过程,我尝试尽可能简化它以进行测试。所以它除了随机化一些值并返回随机消息之外什么也不做,

存储过程在 SqlDeveloper 中执行良好...

CREATE OR REPLACE PROCEDURE O_XEROX_PRNT_PRT 
(
CLIENT_KEY IN VARCHAR2
,P_STATUS IN VARCHAR2

-- OUTPUT back to java
, O_STATUS OUT BOOLEAN
, O_MESSAGE OUT VARCHAR2

) AS
PROC_STATUS BOOLEAN;
PROC_ERROR_MESSAGE VARCHAR2(4000);

rand_num number;
BEGIN

dbms_output.put_line('O_XEROX_PRNT_PRT ');
select round(dbms_random.value(1,10)) into rand_num from dual;

IF rand_num > 8 THEN
PROC_STATUS := TRUE;
PROC_ERROR_MESSAGE := 'ALL IS GOOD';
ELSE
PROC_STATUS := FALSE;
PROC_ERROR_MESSAGE := 'SOMTHING WENT WRONG!!! ';
END IF;


END O_XEROX_PRNT_PRT;

我正在使用的Java代码:

     String CLIENT_KEY          = 'CLIENT_KEY val';
String P_STATUS = 'Printer works';

Boolean O_STATUS =true;
String O_MESSAGE ;

JdbcTemplate template = new JdbcTemplate(printerHubPortalDS);

SimpleJdbcCall jdbcCall = new SimpleJdbcCall(template).withProcedureName("O_XEROX_PRNT_PRT")
.declareParameters(
new SqlParameter(CONST_CLIENT_KEY, Types.VARCHAR),
new SqlParameter(CONST_P_STATUS , Types.VARCHAR),
);

MapSqlParameterSource paramMap = new MapSqlParameterSource()
.addValue(CONST_CLIENT_KEY,CLIENT_KEY)
.addValue(CONST_P_STATUS ,P_STATUS );

//This line is throwing the error
Map<String, Object> resultMap = jdbcCall.execute(paramMap);

String tmp = (String)resultMap.get(CONST_O_STATUS);
O_STATUS = Boolean.valueOf(tmp);
O_MESSAGE = (String) resultMap.get(CONST_O_MESSAGE);

最佳答案

您似乎尚未在 declaredParameters 中定义输出参数。

在当前 SqlParameter 下添加以下内容应该可以解决该错误。

new SqlOutParameter("O_STATUS", Types.BOOLEAN),
new SqlOutParameter("O_MESSAGE", Types.VARCHAR)

关于java - 调用 Oracle 存储过程抛出由 : java. sql.SQLException 引起的异常:无效的列类型:1111,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60012132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com