Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 06/12/2011, 16h43   #1
Invité de passage
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 1
Points : 1
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
Emile87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 16h46   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
TRUNCATE TABLtable7
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 16h50   #3
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
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 313
Points : 5 817
Points : 5 817
Truncate c'est du DDL donc Sql Dynamique.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 16h50   #4
Invité de passage
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 1
Points : 1
non c'est une erreur de ma part,

je fait aussi
truncate table table7;
end supall;

pardon
Emile87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 16h52   #5
Invité de passage
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 1
Points : 1
en fait, j'utilise sqldevelopper,
je ne comprend pas ou mettre le sql dynamique

Merci pour votre réponse
Emile87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 18h32   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
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 313
Points : 5 817
Points : 5 817
Code :
1
2
3
4
5
6
 
Begin
  execute immediate 'truncate table table1';
  execute immediate 'truncate table table2';
End;
/
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/12/2011, 10h34   #7
Invité de passage
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 1
Points : 1
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 :
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.
Emile87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 11h01   #8
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
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 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 :
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;
/
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 13h08   #9
Invité de passage
 
Femme
Étudiant
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant
Secteur : Conseil

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 1
Points : 1
oui MERCI BEAUCOUP C'est bon
merci pour votre aide
Emile87 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 21h56.


 
 
 
 
Partenaires

Hébergement Web