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

SQL Oracle Discussion :

Execute immediate truncate table


Sujet :

SQL Oracle

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 224
    Points : 211
    Points
    211
    Par défaut Execute immediate truncate table
    Bonjour,

    Je rencontre un problème dans un bloc PL/SQL dans lequel je réalise un TRUNCATE de plusieurs tables. J'ai un curseur qui contient le nom de mes tables et je fais une boucle for pour le parcourir et tronquer toutes les tables contenues dans mon curseur.

    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
    DECLARE
    	CURSOR c IS SELECT owner, table_name
    	FROM  dba_tables 
    	WHERE TABLE_NAME IN ('TOTO','TATA', 'TITI')
    	AND owner IN ('BCDM_CH','BCDM_DMT');
    BEGIN
    	FOR rec in c
    	LOOP
    		EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || rec.owner || '.' || rec.table_name || ' CASCADE CONSTRAINTS';/
    	END LOOP;
    EXCEPTION
    WHEN OTHERS THEN
    	DBMS_OUTPUT.PUT_LINE('Une erreur est survenue : ' || SQLCODE);
    END;
    /
    Mais je rencontre à chaque fois cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Une erreur est survenue : -3291 ORA-03291: Invalid truncate option - missing    
    STORAGE keyword
    Il me tronque bien les deux première tables... Je ne comprends pas à quoi correspond cette erreur...

  2. #2
    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
    Regarde la syntaxe de la commande truncate (Oracle 10R2)
    TRUNCATE
    { TABLE [ schema. ]table
    [ { PRESERVE | PURGE } MATERIALIZED VIEW LOG ]
    | CLUSTER [ schema. ]cluster
    }
    [ { DROP | REUSE } STORAGE ] ;
    Moi je ne vois pas de "CASCADE CONSTRAINTS".

  3. #3
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Moi je ne vois pas de "CASCADE CONSTRAINTS".
    Pour la simple est bonne raison que le truncate ne marchera que si tu as au préalable désactivé les foreign key pointant sur la table que tu veux vider
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  4. #4
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 224
    Points : 211
    Points
    211
    Par défaut
    Ouais en fait, j'ai fait autrement. J'ai désactiver les foreign key et fait les truncate. D'ailleurs j'avais pas fait attention mais y'avait une table partitionnée qui posait problème mais c'est bon.

    Affaire réglée

  5. #5
    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
    Citation Envoyé par scheu Voir le message
    Pour la simple est bonne raison que le truncate ne marchera que si tu as au préalable désactivé les foreign key pointant sur la table que tu veux vider
    Merci, très intéressante . Moi j'avais appris que ce qu'il n'existe pas dans la diagramme de syntaxe ne marche pas!

    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
    28
    29
    30
    31
    32
    Connecté à :
    Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production
    JServer Release 9.2.0.5.0 - Production
    
    SQL> create table emp_bis as select * from emp;
    
    Table créée.
    
    SQL> select count(*) from emp_bis;
    
      COUNT(*)
    ----------
            14
    
    SQL> select constraint_name, constraint_type
    from all_constraints
    where table_name = 'EMP_BIS';
    
    CONSTRAINT_NAME                C
    ------------------------------ -
    SYS_C0020493                   C
    
    SQL> truncate table emp_bis cascade constraints;
    truncate table emp_bis cascade constraints
                           *
    ERREUR à la ligne 1 :
    ORA-03291: Option tronquer erronée - mot-clé STORAGE absent
    
    SQL> truncate table emp_bis;
    
    Table tronquée.
    Voilà à quoi sert la documentation!

  6. #6
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Moi j'avais appris que ce qu'il n'existe pas dans la diagramme de syntaxe ne marche pas!
    C'est le cas également
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/09/2014, 11h00
  2. Execute immediate et rename de table
    Par Scrouik dans le forum Administration
    Réponses: 4
    Dernier message: 23/01/2008, 17h12
  3. execute immediate + DROP TABLE
    Par greg75 dans le forum SQL
    Réponses: 8
    Dernier message: 18/09/2007, 16h29
  4. execute immediate + create table
    Par olivanto dans le forum SQL
    Réponses: 7
    Dernier message: 03/05/2007, 15h41
  5. Creation de table via execute immediate.
    Par Vince7-7 dans le forum Oracle
    Réponses: 3
    Dernier message: 15/01/2007, 16h04

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