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 Re : PL/pgSQL » Recuperation nom d'une table à partir de TG_TABLE_NAME » 29/04/2018 03:09:21

Bonjour, j'ai le même problème ou presque.
La fonction doit permettre après chaque insertion, de donner à la sequence, la valeur du  dernier identifiant de la table .
Dans la fonction je fait reference à la table qui est à la source du trigger (table cercle dans ce exemple) à travers TG_TABLE_NAME
Le trigger appel cette fonction avec en paramettre le nom de la sequence de la table cercle
La fonction et le trigger sont crées correctement.
Mais lors d'une insertion dans la table cercle, j'ai message d'erreur, indiquant que TG_TABLE_NAME n'existe pas ou...........
Mais lorsque je remplace TG_TABLE_NAME par le nom de la table 'cercle', tout marche correctement

Voici mon code:

---2------creation de la table
CREATE TABLE public.cercle
(
  id integer NOT NULL,
  idregion integer,
  code character varying(255) DEFAULT NULL::character varying,
  )
WITH (
  OIDS=FALSE
);
ALTER TABLE public.cercle
  OWNER TO postgres;

--2-------creation de la fonction
CREATE OR REPLACE FUNCTION trigfunc()
RETURNS TRIGGER AS $$
DECLARE
    arg_seq text;
    arg_tab text;   
    i integer :=0;
BEGIN
--    arg_seq := TG_ARGV[0];
--    arg_tab := TG_ARGV[1];

   
  SELECT INTO i max(id) from TG_TABLE_NAME;
 
  PERFORM setval(TG_ARGV[0], i);
               
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

--2-------creation du trigger
CREATE  TRIGGER tg_get_last_cercle_id_seq
AFTER INSERT ON    cercle   

FOR EACH ROW EXECUTE PROCEDURE trigfunc('cercle_id_seq');

--message  après l'execution d'une requete insert sur la table cercle
ERREUR:  la relation « tg_table_name » n'existe pas
LINE 1: SELECT        max(id) from TG_TABLE_NAME
                                   ^
QUERY:  SELECT        max(id) from TG_TABLE_NAME
CONTEXT:  fonction PL/pgsql trigfunc(), ligne 11 à instruction SQL

********** Erreur **********

ERREUR: la relation « tg_table_name » n'existe pas
État SQL :42P01
Contexte : fonction PL/pgsql trigfunc(), ligne 11 à instruction SQL

Dans l'attente de vos réponse!!! Merci d'avance!

Pied de page des forums

Propulsé par FluxBB