IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Pas de fonctions dans les Vues Matérialisées ?


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 18
    Points : 11
    Points
    11
    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)

  2. #2
    Membre éclairé Avatar de philcero
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2007
    Messages : 528
    Points : 773
    Points
    773
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    function toto(coco in varchar2) return varchar2 is ...
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     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.

Discussions similaires

  1. Colonnes conditionnelles dans les vues
    Par n_moalla dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/10/2006, 10h22
  2. Réponses: 5
    Dernier message: 09/07/2006, 18h14
  3. Réponses: 10
    Dernier message: 27/04/2006, 16h03
  4. Pas de callback dans les headers en .c
    Par matcocopunch dans le forum OpenGL
    Réponses: 6
    Dernier message: 12/02/2006, 17h46
  5. Pas de casse dans les XML
    Par :GREG: dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo