Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je suis en quête de méthode pour restituer des messages personnalisés durant le déroulement de la fonction utilisée.
Sous Oracle existait une fonctionnalité pour le réaliser à l'aide du package DBMS_OUTPUT
Il ne semble pas avoir d'équivalent sous POSTGRESQL.
Pour cela, j'ai cru bon d'utiliser la fonction RAISE NOTICE, qui me restitue un message, qui n'est pas tout à fait ce que je souhaite, car du texte indésirable "NOTICE" apparait dans le message, et n'est pas souhaité par l'utilisateur final de ces messages.
Existe t'il un moyen pour obtenir son propre message uniquement ?
(Une précision : Je veux obtenir le message sur la console).
Ci-dessous, le code de la fonction que j'utilise pour l'essai :
CREATE OR REPLACE FUNCTION my_fct1()
RETURNS void AS
$BODY$
DECLARE
V_Ret INTEGER := 0;
V_Message VARCHAR (255) := NULL;
BEGIN
V_Message := 'Ceci est le message souhaité : ';
RAISE NOTICE '%', V_Message;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Le code pour l'exécuter à partir de psql :
SPIE=# select My_Fct1 ();
Le message obtenu :
NOTICE: Ceci est le message souhaité :
Je voudrai obtenir le message ci-dessous, sans l'identifiant NOTICE :
Ceci est le message souhaité :
D'avance merci de votre retour.
Hors ligne
Non, ce n'est pas possible en natif. C'est une fonction SQL, ce n'est pas prévu pour avoir une interface client (texte ou graphique).
Guillaume.
Hors ligne
Dans ce cas, comment pourrait t'on procéder pour obtenir le résultat souhaité ?
Hors ligne
Le seul moyen possible est de créer un outil (en perl, python, php, C, java, ce que vous voulez) qui se connecte à PostgreSQL et fait ce que la fonction SQL fait. Les messages de cet outil n'auront pas les NOTICE.
Guillaume.
Hors ligne
Bonjour,
et pourquoi pas : select 'mon message';
Cordialement.
Cordialement,
Sébastien.
Hors ligne
Merci pour vos retours.
En résumé, pour répondre aux nombreuses questions que l'on trouve sur les forums, il n'y a pas d'équivalent postgreSQL aux fonctionnalités du package DBMS_OUTPUT fourni par Oracle.
Merci de confirmer ma conclusion.
Hors ligne
Si :
RAISE NOTICE
ou select 'message';
ou developpement externe.
Cordialement,
Sébastien.
Hors ligne
Merci de vos retours.
Je continue mes investigations en utilisant RAISE NOTICE pour mes sorties de messages.
Ci-dessous, un exemple de code, qui s'exécute correctement en copiant le texte dans la console psql :
DO
$$
DECLARE
V_Message VARCHAR (255) := NULL;
BEGIN
V_Message := 'Le message : ';
RAISE NOTICE '%', V_Message;
V_Message := '-----------------------------';
RAISE NOTICE '%', V_Message;
V_Message := 'Recapitulatif : ';
RAISE NOTICE '%', V_Message;
V_Message := '-----------------------------';
RAISE NOTICE '%', V_Message;
END;
$$ LANGUAGE plpgsql;
Les messages générés par RAISE NOTICE ressortent bien sur la console de psql.
NOTICE: Le message :
NOTICE: -----------------------------
NOTICE: Recapitulatif :
NOTICE: -----------------------------
A présent, je veux inclure ce code dans un shell script
de la façon suivante :
psql -h ${PGSERVEUR} -d ${PGDB} -U ${PGUSR} -t <<EOF >/dev/null
DO
$$
DECLARE
V_Message VARCHAR (255) := NULL;
BEGIN
V_Message := 'Le message : ';
RAISE NOTICE '%', V_Message;
V_Message := '-----------------------------';
RAISE NOTICE '%', V_Message;
V_Message := 'Recapitulatif : ';
RAISE NOTICE '%', V_Message;
V_Message := '-----------------------------';
RAISE NOTICE '%', V_Message;
END;
$$ LANGUAGE plpgsql;
EOF
J'obtiens les erreurs ci-dessous :
+ psql -h localhost -d user -U password -t
ERROR: syntax error at or near "15653"
LINE 2: 15653
^
ERROR: syntax error at or near "V_Message"
LINE 2: V_Message := 'Le message : ';
^
ERROR: syntax error at or near "RAISE"
LINE 1: RAISE NOTICE '%', V_Message;
^
ERROR: syntax error at or near "V_Message"
LINE 1: V_Message := '-----------------------------';
^
ERROR: syntax error at or near "RAISE"
LINE 1: RAISE NOTICE '%', V_Message;
^
ERROR: syntax error at or near "V_Message"
LINE 1: V_Message := 'Recapitulatif : ';
^
ERROR: syntax error at or near "RAISE"
LINE 1: RAISE NOTICE '%', V_Message;
^
ERROR: syntax error at or near "V_Message"
LINE 1: V_Message := '-----------------------------';
^
ERROR: syntax error at or near "RAISE"
LINE 1: RAISE NOTICE '%', V_Message;
^
WARNING: there is no transaction in progress
ERROR: syntax error at or near "15653"
LINE 1: 15653 LANGUAGE plpgsql;
Que se passe t'il ?
Il semble que toutes les lignes soient en erreur.
D'avance merci de votre retour.
Hors ligne
Le shell interprète les $$ comme étant la variable d'environnement pour le PID (identifiant processus). D'où le nombre qui apparaît. Vous devez échapper les $$.
Guillaume.
Hors ligne
Merci de l'information.
Effectivement, après avoir échappé les $$, le script se déroule correctement.
Hors ligne
Pages : 1