create or replace matable? [PL/SQL] - SQL/NoSQL - Programmation
Marsh Posté le 23-01-2009 à 13:07:10
si tu ne veux pas passer par une exception parceque tu ne trouve pas ca propre, tu peux toujours faire un truc du style
Code :
|
et après tu fais ton if dessus etc
Marsh Posté le 23-01-2009 à 13:24:15
pourquoi tu fais pas simplement un :
Create or replace table matable...
Marsh Posté le 23-01-2009 à 14:24:36
Citation : pourquoi tu fais pas simplement un : |
Pasque ça marche pô! (option eronnée ou absente)
@Casimimir: j'ai fait comme ça, ça marche bien, merci!
En fait, le truc avec l'exception, c'est que si je veux insérer mes lignes dans tout les cas, ça me fait dupliquer les insert into qui sont assez nombreux. Ou alors 2 scripts a passer: un pour la création/drop des tables, l'autre pour le contenu (mais je préfère éviter d'avoir plusieurs scripts B). Ou un truc plus simple encore que n'importe quel type un minimum formé au SQL connaitrait.
Pfff! Pourquoi c'est a moi de faire ces machins en urgence alors que j'y connais rieng?
En tout cas merci.
Marsh Posté le 23-01-2009 à 14:33:54
ca ne devrait pas dupliquer si tu fais un truc du genre:
Code :
|
Marsh Posté le 23-01-2009 à 15:58:28
Bien vu, je n'avais même pas envisagé qu'il était possible de faire des begin-end imbriqués... Je ferais bien de trouver un bouquin sur le script.
Un dernier problème: Qaund la table n'est pas crée au début du script, et que je le lance sans les insert, ça marche, la table est crée, et les inserts passent ensuite.
Par contre, en l'état avec les insert juste a la suite du
execute immediate 'create matable (colonnes1,2...)';
J'ai une erreur comme quoi la table n'existe pas!? Alors qu'en lançant juste la partie drop/création puis ensuite les insert, c'est OK, mais tout a la suite non?
Il ne me manquerais pas une instruction dans ce cas?
Marsh Posté le 23-01-2009 à 12:05:38
Bonjour.
J'ai un script a executer sur une base.
Je cherche une astuce pour gerer le cas ou une table existe ou non.
Quelque chose genre if matable exists drop matable
Pour le moment, ça donne ça:
declare
begin
execute immediate 'drop matable';
execute immediate 'create matable (colonnes1,2...)';
+ 500 lignes d'inserts into crées par un autre script lancé sur une autre base (script qui sert a créer celui-ci, d'ailleurs. - En fait: Un script unix est lancé sur la base A et appelle le fichier A.SQL. Il crée alors le fichier B.SQL qui sera lancé sur la base B - Ici, le problème concerne le contenu du script B)
Mais alors le problème est que je veux gérer les cas ou la table a créer existe ou non: ici, j'ai une erreur dans le "drop" si la table n'existe pas.
avec un
exception
when other then
execute immediate 'create matable (colonnes1,2...)';
Je peux créer la table quoi qu'il arrive, mais j'aimerais aussi y insérer les lignes voulues dans les 2 cas de façon "propre"...
Je crois savoir qu'il existe une astuce, vu que le "create or replace" ne marche pas plus que le "create if not exists" en pl/SQL apparemment.
Merci.