Vous n'êtes pas identifié(e).
Pages : 1
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.
Dernière modification par Miflon (12/05/2021 13:50:50)
Hors ligne
C'est normal. Les variables sont utilisées pour remplacer des valeurs, pas des noms d'objet. Donc ça fonctionnerait par exemple dans un 'SELECT... WHERE id= nom_variable', mais pas dans la majorité des requêtes DDL.
Pour que cela fonctionne, vous devez utiliser des requêtes dynamiques. Voir https://docs.postgresql.fr/13/plpgsql-s … CUTING-DYN pour les détails
Guillaume.
Hors ligne
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.
Hors ligne
Pages : 1