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 12/05/2021 13:44:35

Miflon
Membre

Procedure et paramètres

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

#2 12/05/2021 14:41:27

gleu
Administrateur

Re : Procedure et paramètres

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

#3 12/05/2021 18:55:17

Miflon
Membre

Re : Procedure et paramètres

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

Pied de page des forums