"invalid number exception: invalid number: not a valid number string"调用存储过程时
"invalid number exception: invalid number: not a valid number string" when call a stored procedure
我有一个小的存储过程:
CREATE PROCEDURE "XYZ"."TEST" (
IN KKK_ID NVARCHAR(12),
IN START_DATE SECONDDATE,
IN END_DATE SECONDDATE,
IN INTER INTEGER
)
SELECT
*,
ROW_NUMBER() OVER(ORDER BY "DATES") AS "INDEXX"
FROM "XYZ::DATA"
WHERE
"DATES" >= :START_DATE
AND
"DATES" <= :END_DATE
AND
"ID" = :KKK_ID
ORDER BY "DATES";
当我尝试调用此过程时,收到此错误消息:
CALL "XYZ"."TEST"('DE666', '2014-01-01', '2015-12-31', 2234);
invalid number exception: invalid number: not a valid number string 'DE666'
但是 'D666' 看起来像一个字符串 - 至少对我来说是这样。这里有什么问题吗?
PS: id
不是保留字。
好的,错误消息并没有说“'DE666' 不是有效的字符串。”它说的是“'DE666' 不是有效的 数字 字符串”。这意味着对于 HANA,此字符串不是数字的有效字符串表示形式。
有效的表示是那些可以转换成数字的表示,例如'1'、'2.34'、'4,323,252.2354' 等。
字符串中的 'DE' 位对数据类型转换例程没有意义。
所以,这就是关于错误消息的内容。
您提出的第二点是 "ID" 的基列实际上是一个 NVARCHAR 列,所以不太清楚为什么首先要进行类型转换。根据我的经验,这种转换是由于隐式转换而发生的,而开发人员并未注意到。例如。 "XYZ::DATA" 的 return 类型定义(可以是视图或 table 函数)可能已声明为数字。这很容易被忽视,而且并不少见。
如果找不到这样的错误类型声明,则放置 post 所有 DDL 以重现问题。
我在 运行 长查询时遇到了类似的错误。
错误发生的地方是
where m.member = 'id'
所以我把它改成了
where m.member like 'id%'
瞧!有效!该错误不再出现。
我仍然不知道错误首先出现的背后原因或如何解决问题,但是嘿,只要解决方案有效。
只是发布这个以防其他像我这样的人将来遇到这个问题。
我有一个小的存储过程:
CREATE PROCEDURE "XYZ"."TEST" (
IN KKK_ID NVARCHAR(12),
IN START_DATE SECONDDATE,
IN END_DATE SECONDDATE,
IN INTER INTEGER
)
SELECT
*,
ROW_NUMBER() OVER(ORDER BY "DATES") AS "INDEXX"
FROM "XYZ::DATA"
WHERE
"DATES" >= :START_DATE
AND
"DATES" <= :END_DATE
AND
"ID" = :KKK_ID
ORDER BY "DATES";
当我尝试调用此过程时,收到此错误消息:
CALL "XYZ"."TEST"('DE666', '2014-01-01', '2015-12-31', 2234);
invalid number exception: invalid number: not a valid number string 'DE666'
但是 'D666' 看起来像一个字符串 - 至少对我来说是这样。这里有什么问题吗?
PS: id
不是保留字。
好的,错误消息并没有说“'DE666' 不是有效的字符串。”它说的是“'DE666' 不是有效的 数字 字符串”。这意味着对于 HANA,此字符串不是数字的有效字符串表示形式。 有效的表示是那些可以转换成数字的表示,例如'1'、'2.34'、'4,323,252.2354' 等。 字符串中的 'DE' 位对数据类型转换例程没有意义。
所以,这就是关于错误消息的内容。 您提出的第二点是 "ID" 的基列实际上是一个 NVARCHAR 列,所以不太清楚为什么首先要进行类型转换。根据我的经验,这种转换是由于隐式转换而发生的,而开发人员并未注意到。例如。 "XYZ::DATA" 的 return 类型定义(可以是视图或 table 函数)可能已声明为数字。这很容易被忽视,而且并不少见。
如果找不到这样的错误类型声明,则放置 post 所有 DDL 以重现问题。
我在 运行 长查询时遇到了类似的错误。
错误发生的地方是
where m.member = 'id'
所以我把它改成了
where m.member like 'id%'
瞧!有效!该错误不再出现。
我仍然不知道错误首先出现的背后原因或如何解决问题,但是嘿,只要解决方案有效。
只是发布这个以防其他像我这样的人将来遇到这个问题。