Vous n'êtes pas identifié(e).

#1 02/04/2013 13:05:25

peterslast
Membre

Exécution d'un script SQL avec pgAdmin 1.10

Bonjour,

N'étant pas novice en SQL mais débutant en PGSQL, et tournant en rond devant les messages d'erreur ("erreur de syntaxe") remontés par pgAdmin je poste donc mon premier message.

Je souhaiterais faire un script SQL pour mettre à jour des structures de tables et des rajout de données,
Mais je n'arrive pas ne serait ce qu'à déclarer une variable : le message est "erreur de syntaxe", et ne me dit pas plus qu'est ce qui ne va pas.
J'imagine qu'il doit me manquer des données... Mais j'ai beau avoir épluché la doc de PGSql il n'y a pas d'exemples concrets complets... 

Pourtant mon script n'est pas bien compliqué... Voici ce qu'il devrait faire :
- Vérifier l'existence d'une ligne, la rajouter si elle n'existe pas,
- Faire un update de certaines colonnes nulls afin qu'elles aient une valeur (pour les rendre non nullable via le script)
- Insérer des colonnes null et non null,
- Insérer des données dans des tables.

Avec un résultat qui serait de type "0" si tout va bien, et -1 si ça n'a pas fonctionné, le tout avec un commit et un roll back.

Merci pour votre aide.

Hors ligne

#2 02/04/2013 13:14:34

rjuju
Administrateur

Re : Exécution d'un script SQL avec pgAdmin 1.10

Bonjour,

vous parlez du langage de script de pgAdmin ou d'une procédure stockée ? Votre version version de pgAdmin est assez ancienne, je suppose donc que vous avez une version antérieure à la 9.0, qui ne permet donc pas l'utilisation de fonctions anonymes (mot clé do).

Je vous conseillerais plutôt d'utiliser une procédure stockée pour cela.

Hors ligne

#3 02/04/2013 13:17:01

peterslast
Membre

Re : Exécution d'un script SQL avec pgAdmin 1.10

A voir lequel est le mieux, mais il s'agit pour moi d'un script dans ce sens ou il ne sera lancé qu'une seule fois.

A noter que j'ai installé Navicat lite mais que j'ai les mêmes erreurs...
test integer;

erreur de syntaxe sur ou près de "test"

Hors ligne

#4 02/04/2013 13:20:18

rjuju
Administrateur

Re : Exécution d'un script SQL avec pgAdmin 1.10

Vous ne pouvez pas déclarer de variable en sql. Il faut passer par un langage de script tel que pl/pgsql, et y ajouter un bloc DECLARE.

Cette page vous donne quelques exemple : http://docs.postgresql.fr/9.2/plpgsql-declarations.html

Hors ligne

#5 02/04/2013 13:25:00

peterslast
Membre

Re : Exécution d'un script SQL avec pgAdmin 1.10

Et en d'autres termes, ça donnerait quoi ?
Là j'ai essayé le code suivant :

EXEC SQL BEGIN DECLARE SECTION; -- j'ai trouvé ça dans la doc en ligne)
int test;
EXEC SQL END DECLARE SECTION;

test = SELECT COUNT(*) FROM Prelevements;

Hors ligne

#6 02/04/2013 13:28:25

rjuju
Administrateur

Re : Exécution d'un script SQL avec pgAdmin 1.10

Un des exemples de la page de documentation :

CREATE FUNCTION instr(varchar, integer) RETURNS integer AS $$
DECLARE
    v_string ALIAS FOR $1;
    index ALIAS FOR $2;
BEGIN
    -- quelques traitements utilisant ici v_string et index
END;
$$ LANGUAGE plpgsql;

il suffit ensuite d'appeler la fonction : select instr('toto',1);

Hors ligne

#7 02/04/2013 13:31:47

peterslast
Membre

Re : Exécution d'un script SQL avec pgAdmin 1.10

Mmmmm
Ce bout de code l'air de fonctionner \o/
Je vais essayer de mettre les updates et insert qui vont bien à l'intérieur. Merci pour le coup de main;

Et si je veux l'exécuter, je fais quoi, j'ouvre un pg admin, je colle ma fonction (toto), je fais un select.toto(), et si mon résultat est égal à 1, je peux ensuiter supprimer ma fonction ?

Dernière modification par peterslast (02/04/2013 13:34:40)

Hors ligne

#8 02/04/2013 13:44:53

rjuju
Administrateur

Re : Exécution d'un script SQL avec pgAdmin 1.10

Le create function... permet de déclarer la fonction. Une fois la fonction créée, pour l'exécuter vous pouvez utiliser pgAdmin avec une fenêtre sql et exécuter "select nom_fonction(argument);" Si le résultat vous va, vous pouvez alors la supprimer (drop function ...)

Hors ligne

#9 02/04/2013 16:20:11

peterslast
Membre

Re : Exécution d'un script SQL avec pgAdmin 1.10

Ok je confirme.
Dernière question, en 8.4, est ce qu'on a la possibilité d'avoir l'équivalent d'un "debug.print" ou moyen d'avoir une trace quelconque pour voir l'avancement et le bilan de l'exécution de la requête ?

Hors ligne

#10 02/04/2013 17:16:48

rjuju
Administrateur

Re : Exécution d'un script SQL avec pgAdmin 1.10

Oui, avec raise notice.

Exeemple: RAISE NOTICE ' message, %',var;

Hors ligne

Pied de page des forums