Vous n'êtes pas identifié(e).
Pages : 1
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.
Merci pour vos réponses.
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?
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.
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.
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.
Merci pour la rapidité de votre réponse. Je vais jeter un œil (et le bon) sur ces requêtes dynamiques et ne manquerai pas de solliciter votre expertise en cas d'échec.
Bonne soirée, Michel.
Bonjour à toutes et à tous.
Je m'initie sans trop de réussite à l'utilisation de procédures stockées dans Postgresql (11.5). Je n'arrive pas à passer des paramètres à la procédure.
Premier essai :
CREATE OR REPLACE PROCEDURE P_A_CREATION_TABLE00 (nom_table VARCHAR(64), cle_primaire VARCHAR(6), montant VARCHAR(32))
AS
/*
==========================================
Fichier :
Copyright :
Auteur :
Créée le :
Description :
==========================================
*/
$$
BEGIN
DROP TABLE IF EXISTS nom_table;
IF nom_table IS NULL OR cle_primaire IS NULL THEN RETURN;
END IF;
CREATE TABLE nom_table (
cle_primaire BIGINT NOT NULL PRIMARY KEY,
montant real NOT NULL);
END;
$$ LANGUAGE plpgsql;
Lancé par :
CALL P_A_CREATION_TABLE00 ('t_e_dividende_div', 'div_id, 'div_montant');
Cela fonctionne hormis que le nom de la table est nom_table, celui de la clé primaire est cle_primaire et celui du champ montant est montant
Deuxième essai : La définition de la procédure n'inclut que le type des paramètres :
CREATE OR REPLACE PROCEDURE P_A_CREATION_TABLE00 (VARCHAR(64), VARCHAR(6), VARCHAR(32))
auxquels il est fait référence dans le code par $1, $2 et $3. Au moment de la définition une erreur est renvoyée au niveau de $1 :
DROP TABLE IF EXISTS $1;
Remerciements anticipés à toutes personnes qui voudra bien m'aider.
Michel.
Merci à tous pour vos réponses. Je me suis replongé dans le manuel de postgresql 9.0.
Le type "serial" n'est pas un vrai type, mais un raccourci de notation qui notamment assigne un générateur de séquence à une colonne. La séquence devant être supprimée si la colonne ou la table le sont. C'est sans doute la raison pour laquelle un domaine ne peut être "serial". Comme l'a écrit rjuju, déclarer une clé primaire sur une colonne de type "serial" suffit.
A bientôt (plus que probable) et merci encore.
Bonjour à toutes et à tous.
A gleu : ma version de pgadmin tournant sous linux est 1.12.2
A rjuju : je prends bonne note qu'il n'est pas possible de créer un domaine de définition de type serial. Donc Pour faire ce que je souhaite je crois qu'il faut :
1°) définir un domaine d'entiers non nuls D_N_ID
2°) créer la clé primaire dont le type appartient à D_N_ID
3°) créer un index ascendant avec un caractère d'unicité sur la colonne XXX_ID.
Est-ce correct?
Merci d'avance pour vos remarques.
Excusez moi pour l'imprécision avec laquelle je m'exprime! J'utilise PGAdmin III pour créer une base de données.
Par exemple une table est composée de deux colonnes, ADH_ID (clé primaire) et ADH_NOM. Je désire définir les domaines de définition des valeurs de ces deux colonnes. Pour ADH_NOM, pas de problème ce sera D_A_NOM de type varchar(32). Quel doit être le type de ADH_ID? Je pensais, peut-être naïvement, utiliser le type "serial", mais il n'est pas disponible dans la liste proposée par PGAdmin.
Merci de m'aider à progresser.
Bonjour à toutes et à tous.
Nouveau dans l'utilisation de Postgresql (version 9.0), je me demande comment créer un "domain" relatif au type d'une clé primaire. Le type "serial" n'étant pas présent dans la liste des types au moment de la création du "domain". Pendant que j'y suis, comment appliquer des contraintes à un "domain", là j'avoue ne pas avoir bien cherché!!!
Pour la création d'autres "domain", pas de problème.
Un remerciement anticipé pour vos réponses.
Pages : 1