|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 5 ![]() |
Bonjour,
Je voudrais faire appel à des procédures stockées dans des vues, et je ne sais pas vraiment comment m'y prendre. Je m'explique... D'un côté, j'ai mis en place une procédure : - Prend un argument une chaine de caractères - effectue de nombreuses modifications (complexes) sur les enregistrements contenant la chaine de caractère donnée - rend un ou plusieurs enregistrements Et de l'autre côté, je voudrais avoir une vue qui ressemblerait à ceci : Code :
Code :
SELECT * FROM MyView WHERE val = 'value'; Une solution simple aurait été : Code :
Et donc, je voudrais savoir s'il existe une manière de "cacher" une procédure derrière une vue. |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
Bonjour,
le principe d'une vue est justement de n'impliquer que des invariants, c'est donc peu compatible avec celui d'une procédure stockée paramétrée... Je ne vois pas de moyen de concilier les deux.
__________________
FAQ XML ------------ « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser » Giacomo Leopardi |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 5 ![]() |
Merci pour ces premières précisions.
J'ai peut-être été trop restrictif en parlant directement de vues... La question reformulée serait donc : Existe-t-il une manière de cacher une procédure derrière quelquechose d'accessible par un ? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
Selon moi c'est impossible. Il existe dans PostgreSQL un système de règle qui permettrait notamment de transformer une requête INSERT, UPDATE ou DELETE en un appel vers une procédure stockée, mais rien qui permet de transformer un SELECT conditionnel en un appel vers une procédure stockée.
__________________
FAQ XML ------------ « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser » Giacomo Leopardi |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 5 ![]() |
Pourrais-je avoir plus d'informations sur ce
"système de règle qui permettrait notamment de transformer une requête INSERT, UPDATE ou DELETE en un appel vers une procédure stockée" ? |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
C'est le système de règles (RULES) qui permet à PostgreSQL de réécrire à la volée une requête. C'est décrit dans la documentation . Mais en l'occurrence ça ne correspond pas à ce que tu souhaites faire.
__________________
FAQ XML ------------ « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser » Giacomo Leopardi |
|
|
00
|
|
|
#7 | ||||
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 5 ![]() |
J'ai trouvé une manière, pas totalement satisfaisante, mais utilisable, pour faire ce que je cherchais.
D'abord, on crée une table bidon, qui permettra de passer les paramètres : Code :
CREATE TABLE bidon (id integer NOT NULL, PRIMARY KEY (id), UNIQUE (id)); Code :
Et voici comment "executer" la procédure : Code :
2 : on récupère le résultat, à travers la procédure 'what_i_want' 3: on peut supprimer la valeur rentrée dans la table bidon Si quelqu'un a une solution plus efficace et/ou jolie, je serais très interessé. |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com