0

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

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 函数运行此查询。

4

3 回答 3

0

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

于 2015-04-29T12:58:07.630 回答
0

如果您使用 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));

好吧,基本上,只是不要。

于 2013-09-12T16:46:59.517 回答
0

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

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

于 2013-06-26T14:03:19.190 回答