Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/05/2008, 13h34   #1
Invité régulier
 
Inscription : mai 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 18
Points : 5
Points : 5
Par défaut Pas de fonctions dans les Vues Matérialisées ?

Bonjour à tous!
je vous expose mon problème:
Je souhaite construire une vue matérialisé à partir du code SELECT d'une vue que j'utilise très fréquemment qui s'appelle vedevpv.
J'écris donc:
"Create Materialized View MV1 refresh on commit as select..." puis j'écris mon select de la vue précitée (je précise que je réécris le code de la vue et non select * from vedevpv)
et oracle me retourne que la colonne suivante n'existe pas : "FCT_Z10(evp.codpro, evp.sigfou , eve.dateve) Z10"

En effet ceci est une fonction qui retourne un prix de d'achat en fonction d'un produit, de son fournisseur et de la date d'achat... cette fonction est située dans la clause SELECT de ma vue. Le code de cette fonction est très chiant à placer dans un SELECT car il doit faire au moins 6 tests avant de retourner la bonne valeur.
Si je retire cette colonne (ou fonction...) tous se passe bien sinon il veut rien entendre. Comment faire? Je ne sais pas du tous si il est possible ou non d'intégrer une fonction dans une vue matérialisée sachant que cette fonction marche parfaitement dans un SELECT ou une Vue "normale"??
(Je possède la version 8i d'oracle)
jonrod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2008, 12h53   #2
Membre chevronné
 
Avatar de philcero
 
Inscription : septembre 2007
Messages : 519
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2007
Messages : 519
Points : 649
Points : 649
Les vues matérialisées sont souvent taquines pour ne pas dire autre chose.

Les seules fonctions autorisées pour une vue matérialisée sont les fonctions de type DETERMINISTIC. Autrement dit qui retournent toujours le même résultat pour une même série de paramètres donnés.

Pour déclarer ta fonctions en tant que tel il suffit de rajouter le mot DETERMINISTIC après le typage de ton return dans la déclaration :

Code :
FUNCTION toto(coco IN varchar2) RETURN varchar2 IS ...
devient :
Code :
 FUNCTION toto(coco IN varchar2) RETURN varchar2 deterministic IS ...
Maintenant reste à voir si ta fonction réponds bien aux critères d'une fonction de type DETERMINISTIC.

Autre point, il te faut obligatoirement dans ce cas ajouter l'option ENABLE QUERY REWRITE à la déclaration de ta vue matérialisée.
philcero est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h16.


 
 
 
 
Partenaires

Hébergement Web