Vous n'êtes pas identifié(e).

#1 24/03/2020 13:27:39

YvesZeroSR/F
Membre

Table temporaire selon une variable

Bonjour à tous et à toutes,

Je débute sur postgresql et je bloque sur un point qui me semble pourtant simple (du moins simple sur SQL Server).
Je cherche dans une procédure à créer une table temporaire avec un nom spécifique selon des paramètres passés à ma procédure (la procédure pouvant être appelée par plusieurs utilisateurs il me faut un nom différent à chaque utilisateur).
Je fais la concaténation de trois chaines pour nommer ma table temporaire mais quand j'appelle ma table elle porte le nom de ma variable et non pas sa valeur.

Ci-joint le début du code que j'ai épuré un peu pour être plus simple à lire :
CREATE OR REPLACE PROCEDURE public.proc_recherchepiecesselonfournisseursetdepot(
    scodefournisseur character varying, scodedepot character varying, sutilisateur character varying)
LANGUAGE 'plpgsql'

AS $BODY$

DECLARE
    Reference                 varchar(20);
    sNomTableTemp            varchar(50);

    curseur_Fournisseur CURSOR FOR
        SELECT                
            "Reference"        
        FROM "PIECE"
        WHERE "CodeFournisseur" = scodefournisseur
        AND "CodeDepot" = scodedepot;

BEGIN
sNomTableTemp = CONCAT(scodefournisseur, '_', scodedepot, '_', sutilisateur);

DROP TABLE IF EXISTS sNomTableTemp;
CREATE TEMPORARY TABLE sNomTableTemp (
    Reference                 varchar(20)
);
... etc


Ensuite je travaille sur mon curseur pour insérer les données dans ma table temporaire.

Ensuite j'exécute ma procédure avec des paramètres :
CALL proc_RecherchePiecesFournisseurSelondepot('AZ', 'AAA', 'Yves');

Quand je veux voir mes données cela marche avec SELECT * FROM "sNomTableTemp"; mais pas avec SELECT * FROM "AZ_AAA_Yves";
Dans la procédure que je mette ou pas les "" c'est la même chose.

Quelqu'un aurait-il une idée de la bonne méthode ou d'où mon problème peut venir ?

Merci d'avance pour votre aide.

Yves.

Hors ligne

#2 24/03/2020 13:35:04

rjuju
Administrateur

Re : Table temporaire selon une variable

Postgres ne gère pas de variable dans le DDL, il faut exécuter une requête dynamique.  Quelquechose comme

EXECUTE format('CREATE TEMPORARY TABLE %I (...)', sNomTableTemp);

Hors ligne

#3 24/03/2020 14:54:56

YvesZeroSR/F
Membre

Re : Table temporaire selon une variable

Merci Julien, c'est nickel.

Yves.

Hors ligne

Pied de page des forums