2017-01-02 5 views
0

Ich habe eine kleine gespeicherte Prozedur:„ungültige Nummer Ausnahme: ungültige Nummer: keine gültige Zahlenfolge“, wenn ruft eine gespeicherte Prozedur

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

Wenn ich versuche, dieses Verfahren zu nennen, ich diesen Fehler Nachricht:

CALL "XYZ"."TEST"('DE666', '2014-01-01', '2015-12-31', 2234); 

ungültige Nummer Ausnahme: ungültige Nummer: keine gültige Zahl string 'DE666'

Aber die 'D666' sieht aus wie eine Schnur - zumindest für mich. Was ist hier falsch?

PS: id ist kein reserviertes Wort.

+0

@a_horse_with_no_name Eigentlich war dies nur ein Versuch, den Fehler zu lokalisieren. Wenn ich es zurück zu "seconddate" oder etwas anderes ändern, ist die Fehlermeldung die gleiche .. – Tobias

+0

@GurwinderSingh, nein, es ist ein 'varchar (33)' Typ – Tobias

+1

Die Fehlermeldung sagt, dass die Zeichenfolge 'DE666' ist keine gültige Zahl, nicht dass es keine Zeichenkette ist. Warum es versucht, es als eine Nummer zu behandeln, weiß ich nicht. Vermutlich "XYZ :: DATA". "ID" ist eine Zahl? – melpomene

Antwort

1

Ok, die Fehlermeldung nicht sagen, „‘ DE666' keine gültige Zeichenfolge.“Was er sagt, ist‚‚DE666‘ ist keine gültige Nummer string‘. Das bedeutet, dass diese Zeichenfolge für HANA keine gültige Zeichenfolgendarstellung einer Zahl ist. Gültige Darstellungen sind solche, die in eine Zahl umgewandelt werden können, z. '1', '2.34', '4.323.252.2354' usw. Das 'DE' Bit in Ihrer Zeichenfolge ist für die Datentypkonvertierungsroutine einfach nicht sinnvoll.

Also, das ist über die Fehlermeldung. Der zweite Punkt, den Sie gemacht haben, ist, dass die Basisspalte für "ID" eigentlich eine NVARCHAR-Spalte ist, so dass es nicht ganz klar ist, warum es überhaupt eine Typumwandlung gibt. Meiner Erfahrung nach erfolgt diese Art von Conversions aufgrund von impliziten Conversions, die vom Entwickler nicht berücksichtigt wurden. Z.B. Die Rückgabetypdefinition von "XYZ :: DATA" (könnte eine Ansicht oder eine Tabellenfunktion sein) wurde möglicherweise als eine Zahl deklariert. Dies ist leicht zu übersehen und nicht ungewöhnlich.

Wenn Sie eine solche falsche Typdeklaration nicht finden können, platzieren Sie alle DDL-Post, um das Problem zu reproduzieren.

Verwandte Themen