Bonjour,
Je veux soustraire un an à une date.
Le problème c'est que lorsque je compile ma procedure stockée, j'ai l'erreur suivante :
Ca vient d'où ?Code:PLS-00201: identifier 'NUMTOYMINTERVAL' must be declared
Version imprimable
Bonjour,
Je veux soustraire un an à une date.
Le problème c'est que lorsque je compile ma procedure stockée, j'ai l'erreur suivante :
Ca vient d'où ?Code:PLS-00201: identifier 'NUMTOYMINTERVAL' must be declared
Je viens de compiler une procédure contenant
et cela fonctionne très bien (version 9.2)Code:select sysdate + interval '-12' MONTH from dual;
Il me semble...Code:
1
2 SELECT ADD_MONTHS(sysdate,-12) FROM DUAL
ADD_MONTHS est la meilleure solution en effet :)
mais pas la plus normée ;)
certes... mais comme tu dois le savoir, même si Oracle est en train de s'y mettre, la norme c'est pas trop son truc :D
Et puis autant utiliser les outils à notre disposition, le ADD_MONTHS permettant d'avoir une écriture quand même plus trivial :)
1) quelle est ta version?
2) attention aux années bissextiles !Code:
1
2
3
4 SQL> declare d date; begin select SYSDATE + INTERVAL '-12' MONTH into d from dual; end; 2 / PL/SQL procedure successfully completed.
:mouarf: :aie: 8OCode:
1
2
3
4
5
6
7
8
9
10
11 SQL> select date '2004-02-29' + INTERVAL '-12' MONTH from dual; select date '2004-02-29' + INTERVAL '-12' MONTH from dual * ERROR at line 1: ORA-01839: date not valid for month specified SQL> select add_months(date '2005-02-28', -12) from dual; ADD_MONTHS(DATE'200 ------------------- 29.02.2004 00:00:00
Arrgh : C'est grave et on ne peut même pas incriminer Bill Gates :aie:Citation:
Envoyé par laurentschneider
ça me rappelle un blog qui explicait pourquoi il y avait un 29 février 1900 dans Excel : ce serait non pas un bug, mais un feature pour garder la compatibilité avec le système lotus 123 (qui codait la date en format YYMMDD pour améliorer la performance, correct de 1901 à 2099)
http://www.joelonsoftware.com/items/2006/06/16.html
note le 1er jour de excel, c'est pas le 31.12.1899, mais le 0.1.1900 ;)
les années bissextiles c'est le mal de l'enfer maudit... une invention des Sages pour mettre l'informaticien en difficulté :mouarf:
comme l'an 0, l'an 1582, l'an 1752, l'an 2000, l'an 2038, l'an 2050, l'an 10000 :)
Non c'est notre gagne pain car ça génére des bugs qu'il faut corriger ;)Citation:
Envoyé par Fred_D
Après tous vos conseils j'utilise ceci :
Ca ajoute 365 jours...Code:select SYSDATE + 365 FROM DUAL
Comme c'est pour faire une purge, les années bissextiles ne me préoccupe pas trop.
Pour en revenir à mon problème, c'est lorsque je mettais cette ligne
dans une procédure stoquée, que j'obtenais l'erreur de compilation suivante :Code:select SYSDATE + INTERVAL '-12' MONTH from dual
Ce qui est encore plus bizarre c'est que ça compile en integration mais pas en prod... J'enquête mais la solution que j'ai choisie plus haut devrait rester.Code:PLS-00201: identifier 'NUMTOYMINTERVAL' must be declared
Merci en tout cas, de vos conseils.
PS : J'ai lu aussi le blog concernant le non-bug de l'année bissextile de Excel, l'histoire est assez intéressante : My First BillG Review