web-dev-qa-db-fra.com

Comment ajouter des valeurs de paramètres à la requête SQL pgadmin?

Dans pgadmin3, je voudrais utiliser des requêtes paramétrées (pour un débogage plus rapide, il suffit de copier et coller la requête depuis mon fichier php). Mais je n'ai pas trouvé d'option pour ajouter les valeurs de $1, $2... paramètres. C'est possible?

Ceci est la requête que je construis en boucle, suivant la suggestion de test NULL de ici :

SELECT EXISTS(SELECT 1
              FROM tax
              WHERE (addby=$1 or addby<>$1)
                    AND (adddate=$2 or adddate<>$2)
                    AND ($3 IS NULL AND nome IS NULL OR nome=$3)
                    AND ($4 IS NULL AND rank IS NULL OR rank=$4)
                    AND ($5 IS NULL AND pai IS NULL OR pai=$5)
                    AND ($6 IS NULL AND valido IS NULL OR valido=$6)
                    AND ($7 IS NULL AND sinonvalid IS NULL OR sinonvalid=$7)
                    AND ($8 IS NULL AND espec IS NULL OR espec=$8)
                    AND ($9 IS NULL AND public IS NULL OR public=$9)
       );

Notez que remplacer tous les paramètres à la main est fastidieux, sujet aux erreurs et probablement (j'espère) inutile.

Merci d'avance.

16
Rodrigo

Je ne connais que deux façons.

La première consiste à utiliser PREPARED STATEMENT (Exemple après le manuel de PostgreSQL):

PREPARE usrrptplan (int) AS
    SELECT * FROM users u, logs l
    WHERE u.usrid=$1 AND u.usrid=l.usrid AND l.date = $2;

EXECUTE usrrptplan(1, current_date);

PREPARE crée une instruction préparée. Lorsque l'instruction PREPARE est exécutée, l'instruction spécifiée est analysée, analysée et réécrite. Lorsqu'une commande EXECUTE est ensuite émise, l'instruction préparée est planifiée et exécutée.

Les instructions préparées peuvent prendre des paramètres: des valeurs qui sont substituées à l'instruction lorsqu'elle est exécutée. Lors de la création de l'instruction préparée, reportez-vous aux paramètres par position, en utilisant $ 1, $ 2, etc.

Les instructions préparées ne durent que pour la durée de la session de base de données en cours. Lorsque la session se termine, l'instruction préparée est oubliée, elle doit donc être recréée avant d'être réutilisée.

La seconde consiste à "trouver et remplacer" $1, $2, .. etc. par des valeurs appropriées. Mais vous voulez éviter celui-ci.

20

Dans DBeaver, vous pouvez utiliser les paramètres dans les requêtes comme vous le pouvez à partir du code, donc cela fonctionnera:

select * from accounts where id = :accountId

Lorsque vous exécutez la requête, DBeaver vous demandera la valeur de: accountId et exécutera la requête.

0
The Coder