Bonjour à tous,

Je me lance dans la création de fonction Postgresql afin de pouvoir les appeler ensuite d'un autre outil (Talend). J'ai souhaité commencer avec quelque chose de simple mais que je n'arrive pas a faire fonctionner : une fonction qui vide la table entrée en argument. Ma table de test s'appelle test_2. Evidemment, quand je la vide via une commande SQL (DELETE FROM test_2), aucun souci particulier. Voici le code de ma fonction qui est censée faire la même chose :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE FUNCTION public.fonction_test(table_name name)
  RETURNS void AS
$BODY$BEGIN
DELETE FROM table_name;
END$BODY$
  LANGUAGE plpgsql VOLATILE STRICT
  COST 100;
ALTER FUNCTION public.fonction_test(name)
  OWNER TO postgres;

Quand je l'execute avec ma table test_2 en argument ( SELECT fonction_test(test_2) ); voici le résultat :

ERREUR: la colonne « test_2 » n'existe pas
LINE 1: SELECT fonction_test(test_2);
^
********** Erreur **********

ERREUR: la colonne « test_2 » n'existe pas
État SQL :42703
Caractère : 22
--> Je n'arrive pas a comprendre pourquoi mon argument est interprété comme un nom de colonne au lieu d'un nom de table....

En entrant l'argument entre guillemet simple ( SELECT fonction_test('test_2') ), le résultat est différent :

ERREUR: la relation « table_name » n'existe pas
LINE 1: DELETE FROM table_name
^
QUERY: DELETE FROM table_name
CONTEXT: fonction PL/pgsql fonction_test(name), ligne 2 à instruction SQL

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

ERREUR: la relation « table_name » n'existe pas
État SQL :42P01
Contexte : fonction PL/pgsql fonction_test(name), ligne 2 à instruction SQL
Est ce que quelqu'un aurez une solution a me proposer svp ?