Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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!
Pages : 1