Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1721 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PL/SQL] create or replace matable?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PL/SQL] create or replace matable?

n°1841952
Baggers
Posté le 23-01-2009 à 12:05:38  profilanswer
 

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.

mood
Publicité
Posté le 23-01-2009 à 12:05:38  profilanswer
 

n°1841981
casimimir
Posté le 23-01-2009 à 13:07:10  profilanswer
 

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 :
  1. select count(*) into v_table_exist
  2. from SYS.ALL_TABLES a
  3. where A.OWNER = p_ton_schema
  4. and a.TABLE_NAME = p_ta_table


 
et après tu fais ton if dessus etc

n°1841992
LePhasme
Les Belges domineront le monde
Posté le 23-01-2009 à 13:24:15  profilanswer
 

pourquoi tu fais pas simplement un :
Create or replace table matable...


---------------
Instagram - Mon PVT en Australie.
n°1842013
Baggers
Posté le 23-01-2009 à 14:24:36  profilanswer
 

Citation :

pourquoi tu fais pas simplement un :
Create or replace table matable...


 
 Pasque ça marche pô! (option eronnée ou absente) :heink:  
 
@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.

n°1842017
casimimir
Posté le 23-01-2009 à 14:33:54  profilanswer
 

ca ne devrait pas dupliquer si tu fais un truc du genre:
 

Code :
  1. declare
  2.    begin
  3.          begin
  4.          execute immediate 'drop matable';
  5.          exception
  6.             when other then null;
  7.          end;
  8.          execute immediate 'create matable (colonnes1,2...)';
  9.          ton insert qui va bien;
  10.    end;

n°1842124
Baggers
Posté le 23-01-2009 à 15:58:28  profilanswer
 

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?


Message édité par Baggers le 23-01-2009 à 15:59:16

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PL/SQL] create or replace matable?

 

Sujets relatifs
Quelle solution pour une première base SQL ?mise a jour de BD SQL en php avec "update"
Pb de connexion sur base 2005 depuis client SQL server 2000[Résolu] - [SQL] probleme de requetage
[SQL] mise a jour via 2 tablesPHP&SQL : Cryptage MD5 Joomla & Page login
Requete SQL HibernateRequête SQL : comptage des colonnes avec une valeur
SQL / PHP Afficher toutes les colonnes d'une table[ACCESS / Requêtes SQL] Help !
Plus de sujets relatifs à : [PL/SQL] create or replace matable?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR