我有一个小的存储过程:
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);
无效号码例外:无效号码:不是有效号码字符串&#39; DE666&#39;
但是&#39; D666&#39;看起来像一根绳子 - 至少对我而言。这有什么不对吗?
PS:id
不是保留字。
答案 0 :(得分:1)
好的,错误消息并未说“' DE666'不是有效字符串。”它所说的“'DE666'不是有效的数字串”。这意味着对于HANA,此字符串不是数字的有效字符串表示形式。 有效的表示是那些可以转换成数字的表示,例如'1','2.34','4,323,252.2354'等 字符串中的“DE”位对数据类型转换例程没有意义。
所以,这是关于错误信息。 你提到的第二点是“ID”的基本列实际上是一个NVARCHAR列,所以它不是很清楚,为什么首先会有类型转换。根据我的经验,这种转换是由于隐式转换而发生的,而这些转换并没有被开发人员所关注。例如。 “XYZ :: DATA”的返回类型定义(可以是视图或表函数)可能已被声明为数字。这很容易被忽视,并不罕见。
如果找不到这种错误的类型声明,请将所有DDL贴出来重现问题。
答案 1 :(得分:0)
我在运行长查询时遇到了类似的错误。
发生错误的部分类似于
where m.member = 'id'
所以我把它改成了
where m.member like 'id%'
瞧!有效!该错误不再出现。
我仍然不知道错误最初出现的原因或如何解决问题,但是嘿,只要解决方案有效。
只是张贴这个以防其他像我这样的人将来遇到这个问题。