Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 15/05/2013 15:58:42
- Gold.Strike
- Membre
Procédure stockée de suppression commune à plusieurs tables
Bonjour,
Pour des opérations de maintenance sur ma base de données, j'ai besoin de supprimer des données sur certaines tables.
Les données seront supprimées via un batch quotidien qui traitera toutes les données à supprimer par lots.
J'aurais donc 2 procédures stockées :
- la première, qui fera un "loop", afin de parcourir l'ensemble des données à supprimer
- la seconde, qui réalisera la suppression, et loguera les éventuelles erreurs dans une table de synchronisation
J'ai des soucis avec la procédure stockée chagée de la supprression, car j'aurais souhaité qu'elle fonctionne pour toutes les tables :
-- Function: delete_data(bigint, text, text)
-- DROP FUNCTION delete_data(bigint, text, text);
CREATE OR REPLACE FUNCTION delete_data(data_id bigint, Colname text, tablename text)
RETURNS integer AS
$BODY$
DECLARE
curtime timestamp;
table_name text;
error text;
request text;
BEGIN
-- on lance la suppression
DELETE FROM tablename
WHERE Colname=data_id;
-- gestion des exceptions
EXCEPTION WHEN OTHERS THEN
curtime := 'now';
table_name := tablename;
error := cast(sqlstate as varchar);
request := 'data_id : ' || cast(data_id as varchar);
raise EXCEPTION 'error : % %', sqlstate, sqlerrm;
INSERT INTO synchronisation_errors_logs("date", error, table_name, request)
VALUES(curtime, error, tablename, request);
RETURN 0;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION delete_data(bigint, text, text)
OWNER TO postgres;
J'obtiens le message d'erreur suivant :
ERREUR: error : 42P01 la relation « tablename » n'existe pas
Est-ce normal?
Ne peut on pas définir un nom de table avec une variable?
Hors ligne
#2 15/05/2013 17:55:39
- rjuju
- Administrateur
Re : Procédure stockée de suppression commune à plusieurs tables
Bonjour,
il faut utiliser une requête dynamique, du genre EXECUTE 'DELETE FROM ' || tablename || ' WHERE ' || colname || ' = ' || data_id;
Julien.
https://rjuju.github.io/
Hors ligne
#3 16/05/2013 14:20:13
- Gold.Strike
- Membre
Re : Procédure stockée de suppression commune à plusieurs tables
Ca marche bien, merci.
Hors ligne