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

Oracle Discussion :

TRUNCATE SUCCESSIF sur plusieurs tables


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut TRUNCATE SUCCESSIF sur plusieurs tables
    Bonjour,
    je voudrais supprimer d'un coup plusieurs tables, donc je crée une procédure stocckée:
    create or replace
    PROCEDURE supall AS
    BEGIN
    TRUNCATE TABLE table1;
    TRUNCATE TABLE table2;
    TRUNCATE TABLE table3;
    TRUNCATE TABLE table4;
    TRUNCATE TABLE table5;
    TRUNCATE TABLE table 6;
    TRUNCATE TABLtable7
    END supall ;
    le script est compilé avec l'erreur suivante:
    Erreur(3,10): PLS-00103: Symbole "TABLE" rencontré à la place d'un des symboles suivants : := . ( @ % ;

    Mais si je fais le TRUNCATE table par table il ya aucun problème ...

    Merci pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    TRUNCATE TABLtable7

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Truncate c'est du DDL donc Sql Dynamique.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    non c'est une erreur de ma part,

    je fait aussi
    truncate table table7;
    end supall;

    pardon

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    en fait, j'utilise sqldevelopper,
    je ne comprend pas ou mettre le sql dynamique

    Merci pour votre réponse

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Begin
      execute immediate 'truncate table table1';
      execute immediate 'truncate table table2';
    End;
    /

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Oui merci le code marche parfaitement, mais lorsque j'essaie de l'encapsuler dans une procédure stockée ça me génère une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create or replace PROCEDURE proc1 AS 
    BEGIN
      DECLARE requete1 VARCHAR2(300);
      BEGIN
        requete1:='TRUNCATE TABLE tab1';
        EXECUTE IMMEDIATE requete1;
      END;
    END proc1 ;
    /
    Résultat la procédure est bien la mais lorsque je l'exécute j'ai une erreur:
    programme sélectionné n'est pas dans un état valide pour être exécuté, recompilez le programme et réessayez...

    Donc ma question : est-il possible d'encapsuler un script avec EXECUTE IMMEDIATE dans une procédure ou autre solution possible.

    Merci pour vos réponses.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il faut vérifier les privilèges.

    Votre utilisateur qui appelle la procédure doit avoir l'autorisation de le faire.
    Il s'agit du privilège EXECUTE.

    Le schéma qui contient la procédure doit avoir l'autorisation d'exécuter le contenu.
    Pour un truncate table, il s'agit du privilège DROP ANY TABLE.

    Notez que le contenu du SQL dynamique, de part sa nature dynamique justement, n'est pas vérifié à la compilation.

    Quelques conseils supplémentaires :
    1. écrivez toujours les noms des schémas qui contiennent les objets. Ça évite beaucoup de tracasserie
    2. vous avez une imbrication inutile dans votre code
    3. adoptez une convention de nommage pour vos objets PL/SQL et/ou utilisez un nom complètement référencé


    Au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE PROCEDURE <schema>.proc1 AS 
      v$_requete1 VARCHAR2(300);
    BEGIN
      proc1.v$_requete1 := 'TRUNCATE TABLE <schema>.tab1';
      EXECUTE IMMEDIATE proc1.v$_requete1;
    END proc1;
    /

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    oui MERCI BEAUCOUP C'est bon
    merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. TRUNCATE sur plusieurs tables
    Par TwAzO dans le forum Requêtes
    Réponses: 9
    Dernier message: 23/06/2008, 18h33
  2. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  3. order by sur plusieurs tables
    Par Mad_Max dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/12/2003, 12h17
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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