2017-01-02 25 views
0

を呼び出すときに、私は小さなストアドプロシージャがあります。私は、このプロシージャをコールしようとすると「無効な数例外:無効な番号:いない有効な数値文字列」ストアドプロシージャ

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); 

無効な数例外:無効な数:無効な数の文字列 'DE666'

しかし、 'D666'は文字列のように見えます - 少なくとも私にとっては。ここで何が間違っていますか?

PS:idは予約語ではありません。

+0

@a_horse_with_no_name 実際には、これはエラーを特定するためのものです。 もし私が 'seconddate'に変更したり、エラーメッセージが同じであれば、エラーメッセージは同じです。 – Tobias

+0

@GurwinderSingh、 いいえ、' varchar(33) 'タイプ – Tobias

+1

エラーメッセージは文字列' DE666'有効な数字ではなく、文字列ではありません。なぜそれを数字として扱おうとしているのか分かりません。おそらく '' XYZ :: DATA "" ID "'は数字ですか? – melpomene

答えて

1

[OK]を、エラーメッセージが「」DE666' は有効な文字列ではありません。」は言っていないそれは何と言うことである 『『DE666』は有効な文字列ではありません』。つまり、HANAにはこの文字列は数値の有効な文字列表現ではありません。 有効な表現は、数字に変換できるものです。 '1'、 '2.34'、 '4,323,252.2354'など 文字列の 'DE'ビットはデータ型変換ルーチンには意味がありません。

これは、エラーメッセージです。 「ID」の基本列は実際にはNVARCHAR列であるため、最初に型変換が行われている理由がわかりません。私の経験では、この種の変換は暗黙的な変換のために発生します。これは開発者が気にしていないものです。例えば。 "XYZ :: DATA"(ビューまたは表関数でもよい)の戻りタイプの定義が数値として宣言されている可能性があります。見過ごしやすく、珍しいことではありません。

このような間違った型宣言が見つからない場合は、すべてのDDLを投稿して問題を再現してください。

関連する問題