Automatisation Trigger de view
Bonjour,
Comme vous pouvez le savoir, sous PostGres SQL, pour réaliser un INSERT sur une vue nous devons réaliser plusieurs test sur les paramètres des variables Old ou New.
Je suis donc à la recherche des informations de construction de ma base, afin d'automatiser mes tests sur les différents paramètres de mes variables Old et New.
Suite à de multiples recherches infructueuses (je ne doit pas avoir les bons mots clés lors de mes recherches), je viens vers vous afin de vous demander de plus ample informations sur le fonctionnement interne du SQL de PG.
- lors d'un "insteadof" sur une vue, les seules variables global, générées et récupérables sur une fonction Trigger ,sont uniquement Old et New? si non lesquelles puis-je récupérer et comment ?
- est-il possible de boucler sur les variables globale Old et New ? si oui un exemple ne serait pas de refus.
- est-il possible de récupérer des informations relatives à la construction de notre base dans des fonctions Trigger SQL? Si oui comment ?
A terme, je voudrai réaliser plusieurs algorithmes pour l'automatisation des vues sur les INSERT, DELETE et UPDATE, ce qui je pense pourrai être particulièrement utile pour réduire le code sur des vues complexes.
Plus en détail et en pseudo code, l'algorithme auquel j'ai pensé en sachant qu'il doit etre bien plus complexe à réaliser (c'est une ébauche pour faire comprendre mon but):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
Fonction Test() /* vérification du remplissage des champs de ma vue */
déclaration de tableauTestTable
déclaration de i , j
Pour chaque élément de New
tableParent prend la valeur du parent de lélément de New
tableauTestTable[i][0] prend la valeur de tableParent
Si tableParent nexiste pas dans tableauTestTable alors
nbsColonne[i] prend la valeur du nombre de colonnes dans tableParent
Pour chaque colonne dans tableParent
nomColonneTable[i] prend la valeur du nom de la colonne
colonne suivante
fin si
Si New.ColonneActuelle est null alors
tableauTestTable[i][1] prend la valeur '0'
Si non
tableauTestTable[i][1] prend la valeur '1'
Fin si
incrémentation de la variable i
New suivant
Boucle tant que j est inferieur ou égale a i
tableauTableEtrangeres prend la valeur de la fonction de vérification des cléfs étrangères de la table en cours
Pour chaque élément de tableauClefEtrangeres
si tableauTestTable[j][0] est égale à une table présente dans tableauTableEtrangeres alors
on vérifie la présence du nom de la table dans la vue et son satut (rempli ou pas)
si pas rempli alors message derreur : "champs non rempli"
si non message derreur : "erreur sur la vue, information manquante"
tableauClefEtrangeres suivant
Fonction Insert(New, tableParent, nbsColonne, nomColonneTable)/*fonction de traitement de chaine pour réalisé un insert*/
Loop
Fin de fonction |
il est fort probable que l'algorithme ne soit pas complètement exact, je suis encore en train de travailler dessus.
De plus je n'ai aucune certitude sur la faisabilité de plusieurs lignes :bug:.
Si besoin d'autres détail, je vous les fournirais :).
Je prend toutes informations, liens, cours, réponses directe, informations ou autre.
Je vous remercie de votre intérêt à mes questionnements.