2016-04-28 25 views
0

Ich brauche Anzahl Tage Datum hinzuzufügen Tage bisher in hana gespeicherte Prozedur hinzufügen, aber ich erhalte Fehlermeldungbenötigen in SAP Hana gespeicherte Prozedur

FEHLER BEIM DATUM/ZEIT Parsen

v_end_date_plus: = ADD_DAYS (TO_DATE ('|| || p_end_date', 'YYYY-MM-DD'), 90)

wo p_end_date DATE ist und ich diesen Wert als Parameter am geben, während die gespeicherte Prozedur aufrufen.

v_end_date_plus ist eine DATE Variable.

aber ich bekomme Fehler beim Ausführen dieser.

Gibt es einen anderen Weg oder was mache ich falsch darin?

+0

Sie sollten die Fehlermeldung veröffentlichen. – Hannobo

Antwort

-1

p_end_date sollte ein Varchar-Feld oder das entsprechende Zeichenfolgenliteral in Ihrer Technologie verwendet werden. Es sollte nicht in Anführungszeichen stehen.

v_end_date_plus := add_days (TO_DATE(p_end_date , 'YYYY-MM-DD'), 90) 

ERKLÄRUNG ORACLE als Referenz:

In der Oracle-Datenbank, die Standard-Datumsformat ist TT-MON-RR oder TT-MON-YYYY.

Also, wenn ich das korrekte Datumsformat zu p_end_date Variable verwenden, kann ich Ausgabe erhalten.

Wenn ich jedoch von diesem Standardformat abweichen, würde mein Versuch fehlschlagen.

enter image description here

Also, wenn ich die Flexibilität wünsche p_end_date im Format meiner Wahl neu zu definieren und nicht als pro Standardeinstellung, es sollte ein String Literal sein. (Varchar in Oracle).

EDIT:

Das Wesen dieser Antwort war einfach zu deuten darauf hin, dass die Variable sollte als varchar übergeben werden.

v_end_date_plus := add_days (TO_DATE(:p_end_date , 'YYYY-MM-DD'), 90) 
+0

Oracle und SAP HANA unterscheiden sich stark in der Skriptsprache. Die Erklärung durch Analogie funktioniert in diesem Fall nicht. –

+0

@LarsBr., Ok, Punkt vermerkt. Sind wir sicher, dass diese erweiterte Analogie in diesem Fall nicht funktioniert? Ein schnelles Durchsuchen hatte mir gezeigt, dass ähnliche Syntaxen in HANA existieren. –

+0

@ user4836066, wenn Sie versucht haben und meine Lösung nicht funktioniert, geben Sie es hier an. Ich würde dann die Antwort entfernen. –

1

Auch wenn Sie nicht schreiben hat, was Fehler, den Sie erhalten, ich denke, dass das Problem in Ihrem Code ist so, wie Sie Ihre Eingangsgröße verwiesen: unter Anlehnung an Lars Br Vorschlag der p_end_date Variable Syntax zu ändern.

v_end_date_plus := add_days (:p_end_date , 90); 

Mit dem Doppelpunkt (:) vor dem Parameter sollen Sie in der Lage sein, es zu benutzen, ohne sie in einen anderen Datentyp werfen zu müssen.

0

@LarsBr. Es ist richtig, dass Sie einen Doppelpunkt (:) benötigen, um auf die Variable zu verweisen, und dass, wenn es sich wirklich um einen DATE-Typ handelt, Sie TO_DATE nicht erneut konvertieren müssen.

Aber zusätzlich, in Ihrem Beispiel haben Sie einige Verwechslungen mit Anführungszeichen und Verkettungen, die mich denken lassen, dass Sie tatsächlich eine Zeichenkette mit p_end_date konstruieren möchten.Dies würde zunächst die Umwandlung in ein Datum brauchen:

p_end_date := '2016-05-03'; -- for example 
v_end_date_plus := add_days(TO_DATE(:p_end_date , 'YYYY-MM-DD'), 90); 

Der Teil ' || p_end_date || ' in Ihrem Beispiel sieht auch ein bisschen wie der gesamte Code tatsächlich Teil der Zeichenfolge war in EXEC oder ähnlichem verwendet werden. Wenn dies der Fall ist, müssen Sie einfache Anführungszeichen für beide Parameter, z.

exec 'v_end_date_plus := add_days(TO_DATE(''' || :p_end_date || ''', ''YYYY-MM-DD''), 90)';