PDA

View Full Version : [PL-SQL] Funzione conta festivi : errore debug


Giak79
24-09-2010, 09:28
Ciao A tutti,
sto cercando di creare una funzione che restituisca il numero di giorni festivi ( sab e dom ) compresi in un intervallo di tempo.
La funzione deve accettare come parametri una data inizio e data fine periodo e restituire un intero.
Il codice è li seguente :

create or replace
FUNCTION FR_CALCOLA_GIORNI_FESTIVI (DATE_IN IN DATE, DATE_OUT IN DATE ) RETURN NUMBER IS
BEGIN
RETURN ( SELECT count(*)
FROM ( SELECT rownum rnum
FROM DM_CALENDARIO
WHERE rownum <= TO_DATE(DATE_IN, 'YYYY-MM-DD') - TO_DATE(DATE_OUT, 'YYYY-MM-DD') + 1)
where to_char(TO_DATE(DATE_IN, 'YYYY-MM-DD') + rnum - 1, 'DY' ) in ( 'SAB', 'DOM' ));

END FR_CALCOLA_GIORNI_FESTIVI;

Ma non capisco perchè non vada. il debug mi da un errore
" il programma non è in uno stato valido e non è eseguibile " . cosa ho sbagliato ??
Grazie mille per l'aiuto!

dojolab
24-09-2010, 09:58
Ciao A tutti,
sto cercando di creare una funzione che restituisca il numero di giorni festivi ( sab e dom ) compresi in un intervallo di tempo.
La funzione deve accettare come parametri una data inizio e data fine periodo e restituire un intero.
Il codice è li seguente :

create or replace
FUNCTION FR_CALCOLA_GIORNI_FESTIVI (DATE_IN IN DATE, DATE_OUT IN DATE ) RETURN NUMBER IS
BEGIN
RETURN ( SELECT count(*)
FROM ( SELECT rownum rnum
FROM DM_CALENDARIO
WHERE rownum <= TO_DATE(DATE_IN, 'YYYY-MM-DD') - TO_DATE(DATE_OUT, 'YYYY-MM-DD') + 1)
where to_char(TO_DATE(DATE_IN, 'YYYY-MM-DD') + rnum - 1, 'DY' ) in ( 'SAB', 'DOM' ));

END FR_CALCOLA_GIORNI_FESTIVI;

Ma non capisco perchè non vada. il debug mi da un errore
" il programma non è in uno stato valido e non è eseguibile " . cosa ho sbagliato ??
Grazie mille per l'aiuto!

Ma ti da l'errore quando la crei (o cerchi di crearla) o quando la richiami?

Giak79
24-09-2010, 10:20
Ciao, grazie per la risposta !

In fase di creazione , ho un'icona X sulla funzione appena creata ed avviando il debug mi da un errore .
La funzione non l'ho lanciata

Giak79
24-09-2010, 10:23
DECLARE
FUNCTION FR_CALCOLA_GIORNI_FESTIVI (DATE_IN IN DATE, DATE_OUT IN DATE ) RETURN NUMBER IS GIORNI NUMBER (7,0);
BEGIN
GIORNI := ( SELECT count(*)
FROM ( SELECT rownum rnum
FROM DM_CALENDARIO
WHERE rownum <= TO_DATE(DATE_IN, 'YYYY-MM-DD') - TO_DATE(DATE_OUT, 'YYYY-MM-DD') + 1)
WHERE to_char(TO_DATE(DATE_IN, 'YYYY-MM-DD') + rnum - 1, 'DY' ) in ( 'SAB', 'DOM' ));

RETURN GIORNI;

END FR_CALCOLA_GIORNI_FESTIVI;

Errore: ORA-00922: opzione mancante o non valida

dojolab
24-09-2010, 10:32
Ciao, grazie per la risposta !

In fase di creazione , ho un'icona X sulla funzione appena creata ed avviando il debug mi da un errore .
La funzione non l'ho lanciata

Ok, giusto per capire 'dove' ti potrebbe dare l'errore.
Sinceramente sto guardando la PL SQL e non mettendoci occhio da tempo non riesco ad individuare il problema; tra l'altro strani quei due where vicini, mi fanno un pò di 'senso'.

Lascio parola a chi è piu espero in questo campo :|

Giak79
24-09-2010, 10:36
... tra l'altro strani quei due where vicini, mi fanno un pò di 'senso'.


sono 2 select annidate , il primo where è della select più interna, il secondo è di quella esterna. scusami per l'edit del testo

khelidan1980
24-09-2010, 13:50
DECLARE
FUNCTION FR_CALCOLA_GIORNI_FESTIVI (DATE_IN IN DATE, DATE_OUT IN DATE ) RETURN NUMBER IS GIORNI NUMBER (7,0);
BEGIN
GIORNI := ( SELECT count(*)
FROM ( SELECT rownum rnum
FROM DM_CALENDARIO
WHERE rownum <= TO_DATE(DATE_IN, 'YYYY-MM-DD') - TO_DATE(DATE_OUT, 'YYYY-MM-DD') + 1)
WHERE to_char(TO_DATE(DATE_IN, 'YYYY-MM-DD') + rnum - 1, 'DY' ) in ( 'SAB', 'DOM' ));

RETURN GIORNI;

END FR_CALCOLA_GIORNI_FESTIVI;

Errore: ORA-00922: opzione mancante o non valida

Devi fare Select into GIORNI

Giak79
28-09-2010, 12:38
Perfetto, grazie mille!!