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 :
--> Je n'arrive pas a comprendre pourquoi mon argument est interprété comme un nom de colonne au lieu d'un nom de table....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
En entrant l'argument entre guillemet simple ( SELECT fonction_test('test_2') ), le résultat est différent :
Est ce que quelqu'un aurez une solution a me proposer svp ?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
Partager