【问题标题】:how to find which field is giving error in query如何查找查询中哪个字段出错
【发布时间】:2013-06-23 17:12:21
【问题描述】:

如何查找查询中哪个字段出错:

com.abc.fast.common.db.exception.UncategorizedSQLException: CallableStatementCallback; SQL [{call p_proc_u(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}]; [错误代码:257; SQL状态:42000;消息:不允许从数据类型“VARCHAR”到“NUMERIC”的隐式转换。使用 CONVERT 函数运行此查询。 (数据源:1,类型:SYBASE)];嵌套异常是 com.sybase.jdbc3.jdbc.SybSQLException:不允许从数据类型“VARCHAR”到“NUMERIC”的隐式转换。使用 CONVERT 函数运行此查询。

【问题讨论】:

    标签: sybase


    【解决方案1】:

    这表示数值被引号括起来,或者字符值缺少引号。

    仔细检查您的代码以确保正确地将值传递到数据库中。

    【讨论】:

    • 我不确定你在问什么,但这似乎是一个有效的数据类型声明。
    【解决方案2】:

    如果您在使用 Spring 的存储过程模板时遇到此问题,请确保“declareParameter”的顺序与目标存储过程中指定的参数列表的顺序相同。

    给定一个看起来像这样的存储过程:

    CREATE PROCEDURE dbo.sp_ac_createStoredProc
    
    (
        @pFirst_name  VARCHAR(100),
        @pLast_name   VARCHAR(100)  = NULL,
        @pAge         NUMERIC(2,0) = NULL
    

    像这样声明你的参数

    declareParameter(new SqlParameter(FIRST_NAME, Types.VARCHAR));
    declareParameter(new SqlParameter(LAST_NAME,  Types.VARCHAR));
    declareParameter(new SqlParameter(AGE,        Types.NUMERIC));
    

    会好的。像这样声明你的参数:

    declareParameter(new SqlParameter(AGE,        Types.NUMERIC));
    declareParameter(new SqlParameter(FIRST_NAME, Types.VARCHAR));
    declareParameter(new SqlParameter(LAST_NAME,  Types.VARCHAR));
    

    嗯,基本上,只是不要。

    【讨论】:

      【解决方案3】:

      你可以看到它最终用来调用存储过程的变量值。这可以通过将 jdbctemplate logger 设置为 DEBUG 模式来实现。例如,如果您使用 Spring jdbctempate,则可以将属性 log4j.logger.org.springframework.jdbc.core 设置为 DEBUG。这可以在 log4j.properties 或 logback.xml 中完成。

      【讨论】:

        猜你喜欢
        • 2019-10-18
        • 2013-05-04
        • 2016-06-14
        • 1970-01-01
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        相关资源
        最近更新 更多