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 :

Suppression dans una table selon un paramètre


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 254
    Points : 101
    Points
    101
    Par défaut Suppression dans una table selon un paramètre
    Bonjour à tous

    Voilà je voudrais créer une procédure toute simple qui me supprime dans une table certaines lignes selon une condition (la date = une valeur particulière)

    Le nom de la table et la date à supprimer sont donnés en paramètre.

    Voici mon code :

    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
     
    CREATE OR REPLACE PROCEDURE USERDBA.Suppression_des_erreurs 
        ( 
        p_NOM_TABLE IN VARCHAR2, 
        p_DATE_FONC IN DATE
        ) IS
     
    DECLARE
        v_NOM_TABLE varchar2 := p_NOM_TABLE;
        v_DATE_FONC date :=p_DATE_FONC;
     
    BEGIN
     
     
        DELETE FROM v_NOM_TABLE
        WHERE DAT_MAJ_PHT = v_DATE_FONC;
    END;
     
    END;
    Merci de votre aide.
    J'ai le message d'erreur suivant : à la ligne 8, apparamment j'aurais mal déclaré ma variable..???!!!

    Merci de votre aide.

  2. #2
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Points : 132
    Points
    132
    Par défaut
    Hello,

    Tu vas devoir utiliser du SQL dynamique. Ce que tu essaies de faire ne marchera pas.
    Utilise plutot un "execute immediate DELETE FROM....".

    Si tu as des problèmes à comprendre la syntaxe, n'hésite pas à me contacter.

    Bien à toi,

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 254
    Points : 101
    Points
    101
    Par défaut
    Merci pour ta réponse rapide... j'ai donc modifié le code en conséquence mais rien n'y fait, il me mets une erreur dès la déclaration des variables...

    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
     
    CREATE OR REPLACE PROCEDURE USERDBA.Suppression_des_erreurs 
        ( 
        p_NOM_TABLE IN VARCHAR2, 
        p_DATE_FONC IN VARCHAR2
        ) IS
     
    DECLARE
        v_NOM_TABLE varchar2(30) := p_NOM_TABLE;
        v_DATE_FONC varchar2(10) := p_DATE_FONC;
        v_REQUETE varchar2(250);
     
    BEGIN
     
        v_REQUETE := 'DELETE FROM ' || v_NOM_TABLE || ' WHERE DAT_MAJ_PHT =' || v_DATE_FONC;
        EXECUTE IMMEDIATE v_REQUETE;
     
    END;
     
    END;
     
    /

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Le DECLARE est en trop, on commence la declaration apres le IS
    Il y a un END; de trop

    Bon courage

  5. #5
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Points : 132
    Points
    132
    Par défaut
    Hello,

    Je pense que tu as un problème dans ta syntaxe. Tu n'as normalement pas besoin du DECLARE.

    Je n'ai pas de base de données disponible sous la main pour tester mais ceci devrait compiler.

    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
     
    CREATE OR REPLACE PROCEDURE Suppression_des_erreurs 
        ( 
        p_NOM_TABLE IN VARCHAR2, 
        p_DATE_FONC IN VARCHAR2
        ) IS
        v_NOM_TABLE varchar2(30) := p_NOM_TABLE;
        v_DATE_FONC varchar2(10) := p_DATE_FONC;
        v_REQUETE varchar2(250);
     
    BEGIN
     
        v_REQUETE := 'DELETE FROM ' || v_NOM_TABLE || ' WHERE DAT_MAJ_PHT =' || v_DATE_FONC;
        EXECUTE IMMEDIATE v_REQUETE;
     
    END;
    Bien à toi,

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 254
    Points : 101
    Points
    101
    Par défaut
    Oké ca a l'air de fonctionner, merci beaucoup

    (bon là en fait il y a encore des erreurs mais c'est au niveau des bases, vu que ma proc stock est déclarée dans une autre base que celle que où je veux faire des delete donc il ne reconnait pas le nom de la table... )

    en tous cas merci pour avoir pris du temps de m'aider, je dois avouer que je suis un peu rouillé niveau PL

    bonne journée!

  7. #7
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 107
    Points : 132
    Points
    132
    Par défaut
    Hello,

    Si je peux me permettre, tu peux utiliser une 'bind variable' pour ton paramètre. Quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    v_REQUETE := 'DELETE FROM ' || v_NOM_TABLE || ' WHERE DAT_MAJ_PHT = :1' USING v_DATE_FONC;
    Anticipant ta question "Pourquoi on ne peut pas mettre le nom de la table comme 'bind variable', c'est une limitation d'Oracle.

Discussions similaires

  1. [VB.Net] Comment résoudre l'erreur si suppression dans la table maitre ?
    Par Alexandre` dans le forum Accès aux données
    Réponses: 1
    Dernier message: 26/08/2006, 15h51
  2. suppression dans une table qui contient une clé etrangère
    Par zana74 dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 08/08/2006, 10h58
  3. Problème de suppression dans une table
    Par Splinter dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 10h55
  4. [Debutant]Suppression dans des tables avec contraintes
    Par Roming22 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 26/10/2004, 17h23
  5. Combler les trous lors d'une suppression dans une table
    Par Billybongjoe dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 08/04/2004, 14h02

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