Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/02/2011, 17h48   #1
Membre habitué
 
Inscription : octobre 2006
Messages : 325
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 325
Points : 137
Points : 137
Par défaut PL/SQL dans APEX Probleme avec les Dates

Bonjour tous le monde

Voici mon probleme :

je cherche a vérifier que dans un formulaire , les dates saisie par l'utilisateur soient espacé de au moins 15 jours

Par exemple lors de la validation par une fonction qui renvoi une valeur booléenne :
date debu : 01-01-2011
date fin : 01-05-2011

un code du genre :
Code :
1
2
 
RETURN (:P712_ABO_FIN_DT - :P712_ABO_DEBUT_DT > 15);
pourrait marcher mais mon problème c'est que mes date sont au format DDMMYYYY donc je ne peut pas faire de calcul avec se format

Quel est la meilleur façon de procéder??

Merci de votre aide
teen6517 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 19h13   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il suffit de convertir vos chaînes en dates :
Code :
to_date(<votre_chaine>, 'DDMMYYYY')
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 08h28   #3
Membre habitué
 
Inscription : octobre 2006
Messages : 325
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 325
Points : 137
Points : 137
je test sa dessuite merci beaucoup
teen6517 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 08h50   #4
Membre habitué
 
Inscription : octobre 2006
Messages : 325
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 325
Points : 137
Points : 137
sa ne marche pas du tout (snif)

dans ma variable :P712_ABO_FIN_DT j'ai une date au format DDMMYYYY par exemple 18022010

dans ma variable :P712_ABO_DEBUT_DT j'ai aussi une date au format DDMMYYYY par exemple 19012010

si je demande :P712_ABO_FIN_DT > :P712_ABO_DEBUT_DT
il me répond FALSE sniff (alors que février est bien supérieur a janvier)

comment on peut faire pour passer au format YYYYMMDD qui lui me permet de faire mes calcul??

ou sinon exist-il une fonction qui permet de calculer le nombre de jour en 2 date?? (cette solution serait tip top lol )
teen6517 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 16/02/2011, 10h54   #5
Membre actif
 
Homme Cyrille
Administrateur de base de données
Inscription : avril 2005
Messages : 112
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 32
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : avril 2005
Messages : 112
Points : 191
Points : 191
voir message en dessous
IndianaAngus est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 16/02/2011, 11h07   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Citation:
Envoyé par teen6517 Voir le message
sa ne marche pas du tout (snif)
Si ça marche.

Citation:
Envoyé par teen6517 Voir le message
ou sinon exist-il une fonction qui permet de calculer le nombre de jour en 2 date?? (cette solution serait tip top lol)
La fonction moins. Mais il faut d'abord convertir vos chaînes en dates.
Cf. ma première réponse.
Code :
1
2
3
4
5
6
SELECT to_date('18022010', 'ddmmyyyy') - to_date('19012010', 'ddmmyyyy') AS diff
  FROM dual;
 
      DIFF
----------
        30
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h41   #7
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par teen6517 Voir le message
...dans ma variable P712_ABO_FIN_DT j'ai une date au format DDMMYYYY par exemple 18022010
...
Non, dans votre variable P712_ABO_FIN_DT vous avez une chaine des caractères qui contient des numérique au format DDMMYYYY. D’où le besoin de transformer votre chaine des caractères dans un type de données date pour faire des calcules sur les dates.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 17h09   #8
Membre habitué
 
Inscription : octobre 2006
Messages : 325
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 325
Points : 137
Points : 137
je ne c'est pas pourquoi mais sa ne marcher pas
il me disait que ce n'étais pas un format date valide puis se plaignais de pas pouvoir convertir en chaine de caractère .....

j'ai fini par trouver dans une application démo un exemple de fonction booléenne sur lequelle j'ai pus y adapter vos idée (avec quelque modifs)

et voici le résultat qui chez moi marche niquel

Code :
1
2
3
4
5
6
7
8
9
10
11
 
declare
      interval number ;
begin
SELECT to_date (:P712_ABO_FIN_DT, 'dd/mm/yyyy') - to_date (:P712_ABO_DEBUT_DT, 'dd/mm/yyyy') INTO interval FROM dual;
IF interval >= 30 then 
    RETURN true ;
else
    RETURN false ;
end IF ;
end;
Merci a tout le monde
teen6517 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 17h13   #9
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Avez vous remarqué que ça marche parce que votre chaîne des caractères est au format dd/mm/yyyy et non pas DDMMYYYY come vous l'avez dit ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/02/2011, 17h27   #10
Membre habitué
 
Inscription : octobre 2006
Messages : 325
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 325
Points : 137
Points : 137
Enffet dans mon Élément de page (P712_ABO_DEBUT_DT) dans les paramètres, j'utilisai Masque de format : DDMMYYYY

et pour que mon code marche je l'est modifier en :
Masque de format : DD-MM-YYYY

je ne comprend pas pourquoi je n'y arrivé pas avec vos codes hier soir et se matin ...
teen6517 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h35.


 
 
 
 
Partenaires

Hébergement Web