【问题标题】:Calling Oracle Stored Procedure throws Caused by: java.sql.SQLException: Invalid column type: 1111调用 Oracle 存储过程引发引发:java.sql.SQLException:无效列类型:1111
【发布时间】:2020-02-01 07:36:26
【问题描述】:

我正在使用 Spring SimpleJdbcCall 调用这个 Oracle 存储过程
代码抛出 "Caused by: java.sql.SQLException: Invalid column type: 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);

【问题讨论】:

    标签: java spring-jdbc


    【解决方案1】:

    您似乎没有在declaredParameters 中定义输出参数。

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

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

    【讨论】:

    • 嗯,在添加了我得到 Invalid column type: 16 ill google this 之后。
    猜你喜欢
    • 2018-06-13
    • 2018-07-28
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多