Vous n'êtes pas identifié(e).
Pages : 1
Merci bien.
Pour ceux que cela intéresse, la page Instructions de base de la doc détaillant les commandes dynamiques.
J'ai abouti à
EXECUTE 'SELECT MIN(spr_date_entree_en_vigueur) FROM ' || TG_TABLE_SCHEMA || '.' || TG_TABLE_NAME || ' WHERE svc_id=$1' INTO date_prix_initial USING OLD.svc_id;
L'utilisation de EXECUTE est quelque peu contraignante au regard de mon objectif. Ma requête n'a rien de dynamique, je souhaitais seulement profiter des variables disponibles dans une fonction trigger. Maintenant je me dis qu'il est plus pertinent/efficace dans ce cas de saisir directement le nom de la table. Mais j'en sais un peu plus...
Salut,
J'ai ces quelques lignes dans une fonction pour un trigger 'DELETE'
DECLARE
date_prix_initial date;
BEGIN
date_prix_initial = (SELECT MIN(spr_date_entree_en_vigueur) FROM TG_TABLE_NAME WHERE svc_id=OLD.svc_id);
j 'ai cette erreur :
SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "tg_table_name" does not exist
1. Est-ce parce que TG_TABLE_NAME n'est pas visible depuis la requête?
2. Sans parenthèses autour du SELECT j'avais une erreur de syntaxe. Les parenthèses sont-elles requises?
Merci pour vos lumières.
Merci pour toutes ces précisions.
Bonjour,
j'ai créé 3 tables pour "historiser" les adresses de facturation:
t_address t_invoice_address t_invoice_address_history
adr_id PK cli_id PK iah__id PK
cli_id adr_id adr_id
.... iva_date_begin iah_date_begin
adr_date_create iah_date_end
Pour info, t_invoice_address référence l'adresse de facturation courante et t_invoice_address_history les adresses de facturation pour l'édition de factures avec d'anciennes adresses.
Je suis en train de créer des jeux de test et je pensais renforcer la cohérence du modèle de données.
Par ex, lors de l'INSERT/UPDATE d'un record dans t_invoice_address la valeur de iva_date_begin ne devra pas être antérieure à t_address.adr_date_create
J'ai quelques questions concernant la mise en place de ces vérifications:
1. Je pense utiliser un trigger pour les réaliser. Existe-t-il une alternative?
2. Si j'utilise un trigger, je ne peut pas y effectuer la comparaison. Je dois utiliser une procédure pour le faire?
2. J'aurai besoin de la valeur de t_invoice_address.iva_date_begin dans la procédure. Je peux:
- la passer en paramètre depuis le trigger;
- utiliser une "procédure trigger" afin de disposer de la variable NEW directement.
2.1. La seconde solution semble la plus simple mais y a-t-il des inconvénients à utiliser une "procédure trigger" plutôt qu'une "procédure"?
2.2. Si j'utilise la seconde, suis-je certain que la valeur de NEW sera celle du trigger qui a appelé la procédure et pas d'un autre (appelé entre temps) ou faudra-t-il
vérifier le nom du trigger appelant?
3. Si la comparaison échoue (date non conforme), la procédure génère une erreur. Dois-je me soucier de la valeur de retour de la procédure? L'erreur arrête-t-elle son exécution comme dans d'autres langages?
4. S'il n'y a pas d'erreur est-ce que la procédure doit retourner NULL ou les données à insérer/modifier - dans le cas d'une "procédure trigger"?
Bon je m'arrête là - pour l'instant. Merci d'avance pour votre aide.
Pages : 1