erreur lors de tronquer les tables à partir d'oracle db
Je suis en train de faire quelque chose comme cela dans une procédure pour effacer toutes les données de toutes les tables dans ma base de données.
LOOP
dbms_utility.exec_ddl_statement('alter table ' || c.owner || '.' || c.table_name || ' disable constraint ' || c.constraint_name);
END LOOP;
.
.
.
LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || t.table_name ;
END LOOP;
Maintenant , cela lève l'erreur suivante :
ORA-03291: Invalid truncate option - missing STORAGE keyword
ORA-06512: at "MYSCHEMA.CLEAR_DATA", line 15
ORA-06512: at line 2
Process exited.
Disconnecting from the database MYDB.
- Pourquoi est un espace de stockage de mot-clé obligatoire? J'ai pensé
DROP STORAGE
a la valeur par défaut. -
Même spécification de stockage à proximité, comme dans
EXÉCUTION IMMÉDIATE "TRUNCATE TABLE' || t.nom_table | | l '"abandon " STOCKAGE";
ne l'aide pas. L'erreur est la même.
- J'ai pensé qu'il pourrait avoir quelque chose à voir avec l'étranger contraintes sur certaines tables. Par conséquent, le "désactiver la contrainte" plus tôt dans le script
- Vous devriez essayer de changer EXÉCUTION IMMÉDIATE "TRUNCATE TABLE' || t.nom_table | | l '"abandon " STOCKAGE"; à EXÉCUTION IMMÉDIATE "TRUNCATE TABLE' || t.nom_table | | l '"abandon " STOCKAGE"; Peut-être manquant un peu d'espace 🙂
Vous devez vous connecter pour publier un commentaire.
Je voudrais vous suggérer de construire la commande, vous êtes en cours d'exécution dans une variable de type chaîne de sortie à l'aide de dbms_output, puis l'exécuter. Cela vous permettra de voir exactement ce que c'est d'essayer de l'exécuter est la génération de l'erreur.
Une chose qui pourrait être la cause de cette erreur est que si vous avez un nom de table avec un espace (oui, c'est possible). La solution, si c'est le cas, est d'enrouler le nom de la table dans des guillemets doubles.
Changement de programme:
Cela devrait vous montrer l'état à l'origine du problème.
truncate table Nom_table drop de stockage;