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

PL/SQL Oracle Discussion :

Create Table en PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Responsable R&D
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations professionnelles :
    Activité : Responsable R&D

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Create Table en PL/SQL
    Bonjour

    Je dois préparer un script de migration de base, et avant de créer certaines tables je voulais vérifier qu'elles n'existaient pas déjà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE
     
    	 table_exists INTEGER;
     
    BEGIN
     
    	 SELECT COUNT(table_name) INTO table_exists FROM user_tables WHERE upper(table_name)=upper('xxx');
    	 IF table_exists=0 THEN
    		CREATE TABLE xxx ( .... );
    	end;
     
    END;
    Mais PS/SQL me retourne une erreur PLS-00103: Symbole "CREATE" rencontré à la place d'un des symboles suivants ....


    Une idée ?

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Les commandes de création ne sont pas autorisées en PL/SQL mais on peut tout de même en exécuter en les plaçant d'abord dans une chaine de caractères !
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  3. #3
    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
    Tu devrais employer du SQL dynamique pour exécuter du DDL.
    Mais t’est mal parti. Soit tu fait un Select de la table et tu intercepte l’erreur 942 et si c’est le cas tu lance le script de création donc pas besoin de PL/SQL soit tu emploi le PL/SQL et dans ton cas tu devrait utiliser que du SQL dynamique y compris pour tester l’existence des tables.

  4. #4
    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 alain.couthures Voir le message
    Les commandes de création ne sont pas autorisées en PL/SQL mais on peut tout de même en exécuter en les plaçant d'abord dans une chaine de caractères !
    C'est une description très approximative du SQL Dynamique. Mais très approximative

  5. #5
    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
    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE
     
    	 table_exists INTEGER;
     
    BEGIN
     
    	 SELECT COUNT(table_name) INTO table_exists FROM user_tables WHERE upper(table_name)=upper('xxx');
    	 IF table_exists=0 THEN
    		EXECUTE IMMEDIATE 'CREATE TABLE xxx ( .... )';
    	end;
     
    END;
    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/

  6. #6
    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
    Ou employer le package DBMS_UTILITY
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> drop table xxx purge;
     
    Table supprimÚe.
     
    SQL> exec dbms_utility.exec_ddl_statement('create table xxx (c varchar2(10))');
     
    ProcÚdure PL/SQL terminÚe avec succÞs.
     
    SQL> desc xxx
     Nom                                       NULL ?   Type
     ----------------------------------------- -------- ---------------------------
     
     C                                                  VARCHAR2(10)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 50
    Points : 65
    Points
    65
    Par défaut
    Et il faudra sûrement donner explicitement (pas au travers d'un rôle) le droit de créer une table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT CREATE TABLE TO <USER>;

Discussions similaires

  1. [SQL Server 2000] - Create table avec une variable
    Par Cape31 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/12/2006, 15h08
  2. [SQL] un create table qui devrait fonctionner
    Par klerdesign dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/06/2006, 14h05
  3. [debutant][SQL]Package body et Create table
    Par Carlito_superheros dans le forum Oracle
    Réponses: 6
    Dernier message: 07/04/2006, 10h31
  4. [Sql] Create table
    Par Jerem76 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/07/2005, 17h42
  5. [Sql Server/MSDE][Create Table] limite int identity
    Par joefou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/06/2005, 09h45

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