如何查找哪个字段在查询中给出错误

时间:2013-06-26 13:59:11

标签: sybase

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

  

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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));

嗯,基本上,就是不要。