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).

#76 Re : Général » Génération de messages personnalisés » 16/12/2015 17:57:11

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.

#77 Re : Général » Génération de messages personnalisés » 16/12/2015 10:58:41

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.

#78 Re : Général » Génération de messages personnalisés » 16/12/2015 10:25:14

Dans ce cas, comment pourrait t'on procéder pour obtenir le résultat souhaité ?

#79 Général » Génération de messages personnalisés » 16/12/2015 10:08:34

Mlan2
Réponses : 9

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.

#80 PgAdmin3 » Session de deboggage de fonction » 02/11/2015 17:27:25

Mlan2
Réponses : 1

Bonjour,

.Débutant sur Postgres.

Je cherche à porter un script SQL écrit initialement pour Oracle vers Postgres (9.4). (Plate forme Windows 2008 R2)

J'utilise le deboggeur interne à PgAdminIII pour la mise au point.

1er problème :
========
Lors de sessions de déboggage, lorsque je fais du pas à pas (F11) pour suivre le déroulement du deboggage, il arrive fréquemment que j'ai le message : (step into) en attente de réponse du client.
Lorsque ce message apparaît, je suis bloqué, et le seul moyen de reprendre la main est de killer le programme PgAdminIII. Une fois cette action faite, un des process du serveur Postgres occupe presque les 100% de la cpu du serveur. L'arrêt du SGBD par le gestionnaire de service est inopérant. Le seul moyen de s'en sortir est de killer tous les prcess Postgres, puis de relancer le SGBD également depuis le gestionnaire de services. Une nouvelle session peut être à nouveau ouverte.
Ce phénomène n'est pas systématique (aléatoire).

Avez-vous une explication à ce phénomène ? Comment peut t'on y remédier ?

2eme problème :
==========
Le script SQL à valider fait appel à d'autres fonctions SQL. Une fonction en particulier me cause des soucis. Cette fonction exécutée individuellement fonctionne correctement (en lui passant les paramètres respectifs), mais quand elle est appelée depuis le script principal (fonction principale), j'ai le message ci-dessous :

ERREUR:  la fonction analyse_borne(character varying, character varying, date, date, character varying) n'existe pas
LINE 1: SELECT analyse_borne (V_ELT2, V_LIBELLE, DateDeb, Date...
               ^
HINT:  Aucune fonction ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
QUERY:  SELECT analyse_borne (V_ELT2, V_LIBELLE, DateDeb, DateTrt, JourTrt)
CONTEXT:  fonction PL/pgsql trait_prc(character varying,character varying,character varying,character varying,character varying,character varying,character varying), ligne 158 à affectation

Avez-vous une explication à ce phénomène ? Comment peut t'on y remédier ?

#81 Re : Site PostgreSQL.fr » Colonne inconnue » 30/10/2015 00:11:30

Bonsoir,

Ci-jointe, la description de la table:

  Colonne   |              Type              | Modificateurs
------------+--------------------------------+--------------
NUMJOB     | character varying(8)           | non NULL
TYPE       | character varying(1)           |
RQSDAT     | timestamp(3) without time zone |
RQSHRE     | character varying(6)           |
ETAT       | character varying(1)           |
DEBDAT     | timestamp(3) without time zone |
DEBHRE     | character varying(6)           |
FINDAT     | timestamp(3) without time zone |
FINHRE     | character varying(6)           |
ENTDAT     | timestamp(3) without time zone |
ENTHRE     | character varying(6)           |
PERIOD     | character varying(6)           |
MODULE     | character varying(10)          |
FAMILLE    | character varying(15)          |
NAME       | character varying(15)          |
UTI        | character varying(10)          |
MATRI      | character varying(10)          |
MATSUPPLEE | character varying(10)          |
MATDESTINA | character varying(10)          |
ROLE       | character varying(4)           |
CLASSE     | character varying(1)           |
LANGUE     | character varying(1)           |
HORLGF     | character varying(10)          |
DESTINA    | character varying(20)          |
MAIL       | character varying(1)           |
TYPELANC   | character varying(1)           |
LIB        | character varying(10)          |
PROG       | character varying(10)          |
LIBELLE    | character varying(40)          |
TRI        | character varying(1)           |
CALCUL     | character varying(1)           |
PARAM      | text                           |
PERIODHHMM | smallint                       |
SFDEBHRE   | smallint                       |
SFFINHRE   | smallint                       |
INSTANCE   | character varying(20)          |
NOMLOG     | character varying(128)         |
EXTENSION  | character varying(10)          |
INDICEONG  | character varying(1)           |
Index :
    "i_hoplanc" PRIMARY KEY, btree ("NUMJOB")
    "i_hoplanc1" btree ("MATRI")


La requête exécutée qui fonctionne : select * from hoplanc;

La requête qui ne fonctionne pas : select * from hoplanc where (NUMJOB = '00000226');

D'avance merci de votre retour.

#82 Site PostgreSQL.fr » Colonne inconnue » 29/10/2015 22:12:56

Mlan2
Réponses : 3

Bonjour,

Je suis un débutant avec Postgres, et j'ai des erreurs bien étranges.

Depuis le client SQL PostgreSQL Maestro ou Pgadmin III

Lorsque j'exécute une requête de type select * from matable la requête s'exécute correctement.

Lorsque j'indique un critère dans la clause Where la requête me renvoie une erreur indiquant que la colonne utilisée dans le critère n'existe pas.

Et pourtant la colonne indiquée existe bien.
Que je saisisse le nom de la colonne en majuscule ou bien en minuscule, le résultat est le même.

le résultat est identique avec le client en mode console : psql.

Avez-vous une idée sur le problème que rencontre ?

D'avance merci de votre retour.

Pied de page des forums

Propulsé par FluxBB