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):
il est fort probable que l'algorithme ne soit pas complètement exact, je suis encore en train de travailler dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
De plus je n'ai aucune certitude sur la faisabilité de plusieurs lignes .
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.
Partager