Domanda

Voglio eseguire una semplice funzione in Oracle.La firma è definita come segue:

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

Dovrei essere in grado di eseguirlo con:

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

Ma quando digito "newcaselistforvalidation ('2010-01-01', '2011-01-01', 100)", ottengo:

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

Ho cercato un po 'su Google e sembra che non riesca a digitare la data nel formato corretto.Qualcuno può aiutarmi?

È stato utile?

Soluzione

Interroga NLS_PARAMETERS in Oracle: sarai quindi in grado di vedere in quale formato il tuo DB accetta le date.

In genere, tuttavia, utilizzo la funzione to_date ():

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

Nel Regno Unito per inserire le mie date.

Altri suggerimenti

Un'alternativa alla funzione to_date () è utilizzare il formato standard ANSI per i valori letterali DATE o TIMESTAMP:

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

La data e l'ora vengono sempre specificate utilizzando le regole ISO (AAAA-MM-GG e formato 24 ore per l'ora)

Funziona anche su molti altri DBMS (conformi agli standard).

È meglio non fare affidamento su un valore particolare nelle impostazioni di NLS_PARAMETERS , perché questo renderà la tua funzione interrotta nell'ambiente con un'altra NLS_DATE_FORMAT .

Specificherei esplicitamente la formattazione della data nella tua funzione come suggerito nella risposta sopra

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

INSERT INTO tblDate (dateStart) Valori ('20-GIU-2013 '); Se modifichi il numero intero del mese in una stringa "GG-MON-AAAA" funziona come una stringa di dati valida senza doverla anteporre all'identificatore DATE.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top