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

Requêtes PostgreSQL Discussion :

Script generique drop constraint


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Script generique drop constraint
    Bonjour,

    Je souhaite réaliser un script générique permettant de supprimer toutes les contraintes et toutes les tables d'une bdd donnée.

    Voici donc le script que j'ai écrit:
    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
     
    -- Procedure generique pour supprimer toutes les contraintes et toutes les tables
    DECLARE tableName varchar(32), constraintName varchar (32);
    DECLARE curConstraint CURSOR FOR
    			SELECT T.TABLE_NAME, T.CONSTRAINT_NAME
    			FROM information_schema.TABLE_CONSTRAINTS T
    			WHERE T.CONSTRAINT_CATALOG = 'championnat'
    			AND T.CONSTRAINT_SCHEMA = 'public'
    			AND (T.CONSTRAINT_TYPE = 'FOREIGN KEY' OR T.CONSTRAINT_TYPE = 'UNIQUE');
     
     
    BEGIN;
    OPEN curConstraint;
    LOOP
    	FETCH curConstraint INTO tableName, constraintName;
     
    	IF  NOT FOUND THEN
    		EXIT;  -- exit loop
    	END IF;
     
    	SET SQL = 'ALTER TABLE ' || tableName || ' DROP CONSTRAINT ' || constraintName;
    	EXEC (SQL);
    END LOOP;
    END;
    CLOSE curConstraint;
    DEALLOCATE curConstraint;
    Le problème c'est que ça marche pas ^^.

    J'ai l'erreur suivante:
    ERROR: syntax error at or near "varchar"
    LINE 2: DECLARE tableName varchar(32), constraintName varchar (32);
    ^

    ********** Erreur **********

    ERROR: syntax error at or near "varchar"
    État SQL :42601
    Caractère : 101
    Est ce que quelqu'un à une idée ou a déjà écrit un script équivalent?

    Merci.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    N'y a-t-il personne pouvant me répondre ???

    Est-il possible par une autre approche simple d'obtenir le même résultat? (commande permettant de supprimer toutes les tables d'une base de données)

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    L'idée de faire cette fonction est juste mais il y a tellement d'erreurs de syntaxe dans le code proposé que ça serait une vraie mission de tout corriger.
    Personnellement je n'ai pas d'exemple sous la main mais il me semblerait plus simple de partir d'une fonction qui se compile déjà et de la modifier.
    Des fonctions qui bouclent sur le catalogue il y en a certainement pas mal dans http://archives.postgresql.org/pgsql-general/

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Tout d'abord merci pour ta réponse.

    En effet, il y a certainement énormément d'erreurs dans le script car je ne connais absolument pas postreSql, j'utilise SQLServer a mon travail.
    J'essaye donc de traduire pour un usage personnel des scripts que j'ai déjà écrit pour microsoft.

    Si on oublie toute la procédure et qu'on se limite seulement à la déclaration des variables, je ne comprend pas pourquoi le script crash.
    Si tu as une réponse pour m'éclairer je suis preneur.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Je crois parce que DECLARE ne doit déclarer qu'une variable à la fois

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Un exemple de script qui peut te donner un squelette pour démarrer:
    http://www.archonet.com/pgdocs/grant-all.html

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

Discussions similaires

  1. Erreur sur DROP constraint
    Par pekre dans le forum PL/SQL
    Réponses: 2
    Dernier message: 24/06/2015, 12h20
  2. [2012] DROP CONSTRAINT sans connaitre le nom par script sql
    Par allezjeu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/03/2014, 10h29
  3. script generique load et generation pl/sql
    Par ddmonge dans le forum PL/SQL
    Réponses: 1
    Dernier message: 17/05/2006, 17h56
  4. Script Drop selon conditions
    Par Nergaahl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/04/2006, 09h22
  5. script drop tables
    Par couse1 dans le forum Oracle
    Réponses: 3
    Dernier message: 29/03/2006, 13h56

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