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

PostgreSQL Discussion :

[Syntaxe SQL]Un équivalent de "IF EXISTS" ?


Sujet :

PostgreSQL

  1. #1
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut [Syntaxe SQL]Un équivalent de "IF EXISTS" ?
    Bonsoir à tous,

    Dans un script de création de base pour PostgreSQL, je souhaite, avant de lancer les commande create table, supprimer ces dernières uniquement si elles existent déjà. Je pensais pour cela m'aider d'une requête sur la table système pg_class, tout ceci dans un bloc conditionnel. Dans certains SGBD, il est possible d'utiliser la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF EXISTS (predicat) THEN
         (commande)
     END IF
    Malheureusement, pour PostgreSQL, je n'ai rien trouvé de tel. Est-ce qu'il existe un équivalent à cette syntaxe ?

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Points : 38
    Points
    38
    Par défaut
    Bonjour,
    pour ce qui est des fonctions tu peux ecrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE OR REPLACE FUNCTION mafonction(...)
    ...
    END;
    Par contre, cette syntaxet ne marche pas pour la création de tables...
    c'est tout ce que je sais

  3. #3
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 45
    Points : 48
    Points
    48
    Par défaut
    le booléen FOUND est positionné après chaque requête si le nombre de lignes affectées est non nul. Par contre il faut passer par une fonction trouvée là :
    http://archives.postgresql.org/pgsql...3/msg00125.php

    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
    CREATE OR REPLACE FUNCTION drop_table_if_exists(text, bool) RETURNS bool AS '
    DECLARE
    opt text;
    rec record;
    BEGIN
    IF $2 THEN
    opt := '' CASCADE'';
    ELSE
    opt := '''';
    END IF;
     
    SELECT INTO rec oid FROM pg_class WHERE relname = $1::name;
      IF FOUND THEN
        EXECUTE ''DROP TABLE '' || $1 || opt;
        RETURN true;
      END IF;
      RETURN false;
    END;
    ' LANGUAGE 'plpgsql';

  4. #4
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par moog
    Bonjour,
    pour ce qui est des fonctions tu peux ecrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE OR REPLACE FUNCTION mafonction(...)
    ...
    END;
    Par contre, cette syntaxet ne marche pas pour la création de tables...
    c'est tout ce que je sais
    Je sais bien et c'est justement ce qui m'embêtait. Merci de ta réponse, en tout cas.

    Citation Envoyé par edelatte
    le booléen FOUND est positionné après chaque requête si le nombre de lignes affectées est non nul. Par contre il faut passer par une fonction trouvée là :
    http://archives.postgresql.org/pgsql...3/msg00125.php
    J'en suis arrivé à la même conclusion : passer par une procédure stockée. En tout cas, merci pour le lien et le code. Même s'il est "very lightly tested", ça me fera économiser quelques minutes de recherche dans la doc sur les tables système

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

Discussions similaires

  1. Syntaxe SQL sous BCB
    Par ORLIK dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/10/2004, 20h47
  2. Pb configuration et syntaxe SQL
    Par Glloq dans le forum Débuter
    Réponses: 2
    Dernier message: 09/09/2004, 15h17
  3. syntax sql spéciale pour postgresql ???
    Par krimson dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 05/05/2004, 15h23
  4. requete syntaxe sql
    Par tomm dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/04/2004, 16h56

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