IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Comparaison de dates


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Comparaison de dates
    Bonjour à toutes et à tous, je dois dans le cadre d'une BDD créer une procédure censé pour chaque ligne verifier la date de péremption d'un produit, et si ce dernier est périmé depuis plus de 5 ans, il doit alors être supprimé.

    Ayant peu de notions en PL/SQL je demande votre aide, voici pour le moment ce que j'ai codé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    CREATE OR REPLACE PROCEDURE pcd_supprimer_medic_perimes
    v_date DATE;
    s_date DATE;
    IS
    	CURSOR les_produits IS 
    		SELECT nom_produit FROM PRODUITS;
    		thisproduits les_produits%ROWTYPE;
    	CURSOR date IS 
    		SELECT TO_CHAR(sysdate,'DD/MM/YYYY') into v_date FROM DUAL;
    		SELECT date_expiration into s_date FROM PRODUITS;
     
    BEGIN
    	OPEN date
    	FETCH date;
    	CLOSE cur_date;
    	IF s_date - v_date > 5 THEN
    	OPEN les_produits;
    	LOOP	
    		FETCH les_produits;
    		EXIT WHEN (les_produits%NOTFOUND);
    		DELETE nom_produit FROM PRODUITS;
    	END LOOP;
    	CLOSE date;
    	END IF;
     
    END pc_supprimer_medic_perimes;

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Après l'avoir testé une premiere fois il m'indique l'erreur suivante :
    PLS-00103 : Symbole "FROM" rencontré à la place d'un des symboles suivants :
    @; return retunring(identificateur)

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Pourquoi le faire en PL/SQL ?
    Une simple requête suffirait !

    Ton erreur de syntaxe se trouve à la ligne 10 ;tu ne peux pas faire de select ... into dans un curseur.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Tout simplement parce que je suis obligé de travailler sous Oracle et on m'a confié la création de la procédure chargée de la suppression des médicaments en fonction de leur date d'expiration et de la date actuelle.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Pas besoin de curseur pour faire ça.
    Commence par écrire une requête qui sélectionne les produits qui ont une date de péremption > 5 ans puis transforme la en DELETE.
    Il suffit ensuite de stocker le DELETE dans la procédure.

    Pour info la différence entre 2 dates correspond à un nombre de jours et non d'années.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Cela donnerait quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select nom_produit
    FROM PRODUITS
    WHERE day(sysdate) - day(date_peremption) > 1825

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Attention aux années bissextiles pour déterminer la date du jour - 5 ans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select sysdate, add_months(sysdate,-5*12) as "5ans", sysdate-1825 from dual;
     
    SYSDATE    5ans       SYSDATE-18
    ---------- ---------- ----------
    26/06/2013 26/06/2008 27/06/2008
    Donc plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT nom_produit
      FROM PRODUITS
     WHERE date_peremption < add_months(trunc(sysdate),-5*12)
    TRUNC pour tenir compte de la composante hh:mi:ss du type date

Discussions similaires

  1. comparaison de dates javascript
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/07/2005, 08h45
  2. comparaison de dates
    Par pmithrandir dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/06/2005, 16h12
  3. comparaison de date
    Par nickoshiba dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/03/2005, 15h48
  4. Comparaison de dates
    Par Tapioca dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2004, 15h55
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 21h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo