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

SQL Procédural MySQL Discussion :

Requéte IF NOT EXISTS


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut Requéte IF NOT EXISTS
    Salut,
    j'arrive pas à trouver l'erreur dans ce script, pourtant il marche sous MS SQL SERVER 2008.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        IF EXISTS (
            SELECT * FROM information_schema.COLUMNS
            WHERE column_name='fieldName'
            and table_name='tableName'
            and table_schema='dbName'
            )
        THEN
            ALTER TABLE tableName
                    CHANGE fieldName nouevaufieldName INT NOT NULL AUTO_INCREMENT
        END IF;
    l'erreur Mysql est:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS ( SELECT * FROM information_schema.COLUMNS WHERE column_name='id' at line 1
    est ma version Mysql 5.5.8

    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Il manque le début de ta procédure et la définition du DELIMITER.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    c'est normal, mysql ne supporte pas cette syntaxe...
    ça va faire la même chose:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    declare t bool;
    select count(*)>0 into t from information_schema.COLUMNS
            WHERE column_name='fieldName'
            AND table_name='tableName'
            AND table_schema='dbName'
            
    if t then
        ALTER TABLE tableName
                    CHANGE fieldName nouevaufieldName INT NOT NULL AUTO_INCREMENT;
    end if;

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut
    Citation Envoyé par ericd69 Voir le message
    salut,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    declare t bool;
    select count(*)>0 into t from information_schema.COLUMNS
            WHERE column_name='fieldName'
            AND table_name='tableName'
            AND table_schema='dbName'
            
    if t then
        ALTER TABLE tableName
                    CHANGE fieldName nouevaufieldName INT NOT NULL AUTO_INCREMENT;
    end if;
    MySQL n'accepte pas cette instruction declare t bool;
    je pense qu'il fait declarer les variable seulement enre BEGIN et END, et donc forcement dans une procedure.


    je me rappelle que dans MS SQL SERVER on pouvait exécuter des requetes avec branchement conditionnel et tout, sans déclarer de procédure.
    c'est pas le cas avec MySQL donc je devais faire ceci,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    DELIMITER ;
    drop procedure if exists ModifColumnUnlessExists;
    delimiter //
     
    create procedure ModifColumnIfExists(
    	IN dbName tinytext,
    	IN tableName tinytext,
        IN fieldName tinytext
    	)
    begin
    	IF EXISTS (
    		SELECT * FROM information_schema.COLUMNS
    		WHERE column_name=fieldName
    		and table_name=tableName
    		and table_schema=dbName
    		)
    	THEN
    		set @ddl=CONCAT('ALTER TABLE ',dbName,'.',tableName,
    			' CHANGE ',fieldName,' ',
    			'
    			Lieu_modif VARCHAR(32) NULL
    			');
    		prepare stmt from @ddl;
    		execute stmt;
    	END IF;
    end;
    //
     
    DELIMITER ;
     
     
    CALL ModifColumnIfExists('basename', 'tablename', 'colonne');
    Merci

  5. #5
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    oui je t'ai donné le corps d'une procédure sans préciser car je pensais que c'est ce que tu demandais...

    mysql ne permet pas d'instruction de test ou de branchement hors d'une procédure

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requète clause not exists
    Par frabeau dans le forum VBA Access
    Réponses: 1
    Dernier message: 10/11/2011, 19h08
  2. Comment faire fonctionner une requête avec NOT EXISTS
    Par arnaudperfect dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/11/2007, 10h39
  3. sql requête avec NOT EXISTS
    Par wang_xue dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/10/2007, 19h48
  4. Requête avec NOT EXISTS
    Par lodan dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/07/2007, 10h16
  5. Requète avec NOT EXISTS
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 15h20

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