Frage

Ich möchte eine einfache Funktion in Oracle ausführen.Die Signatur ist wie folgt definiert:

CREATE OR REPLACE FUNCTION NewCaseListForValidation
(
                             p_fromDate in DATE,
                             p_toDate in DATE,
                             p_rowCount in INT
)
RETURN
                             SYS_REFCURSOR
IS
                             return_value SYS_REFCURSOR;
...

Ich sollte es ausführen können mit:

var rc refcursor
exec :rc := newcaselistforvalidation('2010-01-01','2011-01-01',100);
print :rc

Wenn ich jedoch "newcaselistforvalidation ('2010-01-01', '2011-01-01', 100)" eingebe, erhalte ich:

ERROR at line 1:
ORA-01861: literal does not match format string
ORA-06512: at line 1

Ich habe ein bisschen gegoogelt und es scheint, dass ich nicht herausfinden kann, ob ich das Datum in einem korrekten Format eingeben soll.Kann mir jemand helfen?

War es hilfreich?

Lösung

Abfrage von NLS_PARAMETERS in Oracle - Sie können dann sehen, in welchem Format Ihre Datenbank Daten akzeptiert.

Normalerweise verwende ich jedoch die Funktion to_date ():

to_date('01-01-2011','DD-MM-YYYY');

In Großbritannien, um meine Daten einzugeben.

Andere Tipps

Eine Alternative zur Funktion to_date () ist die Verwendung des ANSI-Standardformats für DATE- oder TIMESTAMP-Literale:

DATE '2010-01-31'
TIMESTAMP '2010-01-31 21:22:23'

Datum und Uhrzeit werden immer anhand von ISO-Regeln angegeben (JJJJ-MM-TT und 24-Stunden-Format für Zeit)

Dies funktioniert auch mit vielen anderen (standardkonformen) DBMS.

Es ist am besten, sich in den Einstellungen NLS_PARAMETERS nicht auf einen bestimmten Wert zu verlassen. Dadurch wird Ihre Funktion in der Umgebung mit einem anderen NLS_DATE_FORMAT unterbrochen.

Ich würde die Datumsformatierung in Ihrer Funktion explizit angeben, wie in der obigen Antwort vorgeschlagen

exec :rc := newcaselistforvalidation(to_date('2010-01-01','YYYY-MM-DD'),to_date('2011-01-01','YYYY-MM-DD'),100);

INSERT INTO tblDate (dateStart) Werte ('20 -JUN-2013 '); Wenn Sie die Monats-Ganzzahl in eine Zeichenfolge ändern, funktioniert 'TT-MON-JJJJ' als gültige Datenzeichenfolge, ohne dass der DATE-Bezeichner vorangestellt werden muss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top