PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 28/06/2021 17:47:27

Miflon
Membre

procédure d'affichage.

Bonjour à toutes et à tous.
Je désire faire afficher une variable par une procédure. Voici le code :

CREATE OR REPLACE PROCEDURE s_ent.affiche_message ()
LANGUAGE plpgsql
AS $$
DECLARE
	nom_table varchar(16) := 'ma_table';
	cle_primaire varchar(8) := 'id';
	suffixe varchar(8) := '.mat';
BEGIN
RAISE NOTICE 'Nom de la table: %', nom_table;
END;
$$

Rien ne s'affiche lors du

call s_ent.affiche_message();

Lors de la création de la procédure, aucun message d'erreur n'est envoyé.
Un merci anticipé à celle ou celui qui me dépannera.
Michel.

Hors ligne

#2 28/06/2021 17:51:34

rjuju
Administrateur

Re : procédure d'affichage.

Cela fonctionne comme attendu pour moi:

=# call affiche_message();
NOTICE:  Nom de la table: ma_table
CALL

Peut être que votre client n'intercepte pas les message de type NOTICE?

Lors de la création de la procédure, aucun message d'erreur n'est envoyé.


C'est tout à fait normal, un RAISE NOTICE n'est qu'informatif, et le reste de la procédure ne devrait pas renvoyer d'erreur non plus.

Hors ligne

#3 28/06/2021 17:56:11

ruizsebastien
Membre

Re : procédure d'affichage.

Bonjour,

Aucun message d'erreur lors de la création de la procédure mais également aucun message que la procédure est bien créé.
N'est-ce pas ?

Il manque un ";" à la fin du code de la procédure.



exemple :

postgres=# CREATE OR REPLACE PROCEDURE affiche_message ()
postgres-# LANGUAGE plpgsql
postgres-# AS $$
postgres$# DECLARE
postgres$# nom_table varchar(16) := 'ma_table';
postgres$# cle_primaire varchar(8) := 'id';
postgres$# suffixe varchar(8) := '.mat';
postgres$# BEGIN
postgres$# RAISE NOTICE 'Nom de la table: %', nom_table;
postgres$# END;
postgres$# $$
postgres-# ;
CREATE PROCEDURE
postgres=#
postgres=#
postgres=#
postgres=#
postgres=#
postgres=# call affiche_message();
NOTICE:  Nom de la table: ma_table
CALL

Cordialement,

Sébastien.

Hors ligne

#4 28/06/2021 20:27:29

Miflon
Membre

Re : procédure d'affichage.

Merci pour vos réponses.

rjuju a écrit :

Peut être que votre client n'intercepte pas les message de type NOTICE?

Je suis en localhost. Comment savoir si le client intercepte ou pas les messages de type NOTICE?

ruizsebastien a écrit :

Aucun message d'erreur lors de la création de la procédure mais également aucun message que la procédure est bien créé.

Message renvoyé :
Pas de résultats.
Temps d'exécution total : 11.583 ms
Requête SQL exécutée.

ruizsebastien a écrit :

Il manque un ";" à la fin du code de la procédure.

Le ";" a été rajouté.
Et toujours pas d'affichage. Si je passe  la variable ma_table en paramètre à la procédure, la procédure l'affiche!

CREATE OR REPLACE PROCEDURE s_ent.display_message (INOUT msg TEXT)
LANGUAGE plpgsql
AS $$
BEGIN
RAISE NOTICE 'Paramètre de la procédure : %', msg ;
END;
$$;

Ce qui répond (?) à la remarque de rjuju.
Merci encore pour votre intérêt à mon problème.

Hors ligne

#5 29/06/2021 02:56:01

rjuju
Administrateur

Re : procédure d'affichage.

Comment savoir si le client intercepte ou pas les messages de type NOTICE?


J'imagine que cela doit être documenté quelque part sur la doc/site de votre client.  Mais à priori le problème vient bien de votre client.  Pouvez-vous vérifier que le message s'affiche bien si vous utilisez psql?

Hors ligne

#6 01/07/2021 13:17:20

Miflon
Membre

Re : procédure d'affichage.

J'utilise postgresql 11.4 installé au moyen du stack de bitnami, pour le serveur, et phppgadmin pour le client. Le tout géré par le système d'exploitation W10.

Pouvez-vous vérifier que le message s'affiche bien si vous utilisez psql?

Les deux procédures, lancées dans psql, ont le même comportement que dans phppgadmin, c'est à dire affichage correct avec s_ent.display_message(msg) et pas d'affichage avec s_ent.affiche_message(). Je vais essayer d'utiliser display_message en testant la nullité de msg dans le corps de la procédure pour le constituer à ma guise dans ce cas.
Rendez-vous au prochain épisode, merci pour votre aide, Michel.

Dernière modification par Miflon (01/07/2021 13:18:20)

Hors ligne

#7 02/07/2021 05:43:00

rjuju
Administrateur

Re : procédure d'affichage.

Miflon a écrit :

Les deux procédures, lancées dans psql, ont le même comportement que dans phppgadmin, c'est à dire affichage correct avec s_ent.display_message(msg) et pas d'affichage avec s_ent.affiche_message()

Ah, dans ce cas cela pourrait aussi être lié à une configuration de votre serveur :

=# call display_message('a');
NOTICE:  Paramètre de la procédure : a
 msg
-----
 a
(1 row)

=# set client_min_messages to warning ;
SET

=# call display_message('a');
 msg
-----
 a
(1 row)

Hors ligne

Pied de page des forums