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 :

Création de vue Vs création de vue matérialisée


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut Création de vue Vs création de vue matérialisée
    Bonjour tout le monde !

    je suis sous Oracle 10, et je cherche à créer une vue matérialisée. Le problème, c'est que j'ai une requête de création de vue qui marche impec', mais quand j'essaye de l'adapter pour une vue matérialisée à la place, ça ne marche pas !! Je croyais pourtant que ça se créait exactement de la même manière (enfin, en ce qui concerne le select, quoi...).

    Voici une version simplifiée de mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    drop table tableprincipale
    drop table tablelibelle
    drop view lavue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create table tableprincipale
    (
      PK_tableprincipale varchar2(10) constraint PK_tableprincipale
                                      primary key not null,
      FK_libelle    varchar2(10),
      constraint FK_libelle foreign key (FK_libelle)
        references tablelibelle (PK_tablelibelle) enable
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    create table tablelibelle
     
    (
      PK_tablelibelle varchar2(10) constraint MON_ID_PROGRAMME primary key not null,
      libelle varchar2(10)
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    -- ca, ca marche !
    create view lavue
    as
      select distinct tableprincipale.PK_tableprincipale,
      (select libelle from tablelibelle where PK_tablelibelle=FK_libelle) as libelle
      from tableprincipale
     
    drop view lavue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    -- ca, ca ne marche pas, le select a l'interieur du select est refuse :
    -- ORA-22818.00000 - "subquery expressions not allowed here"
    create materialized view lavue
    REFRESH FAST ON COMMIT
    as
      select distinct tableprincipale.PK_tableprincipale,
      (select libelle from tablelibelle where PK_tablelibelle=FK_libelle) as libelle
      from tableprincipale
    La création de la vue normale se fait, mais celle de la vue matérialisée est refusée, à cause du select à l'intérieur. En même temps, si on peut pas faire de requête un tant soit peu complexe, je vois plus trop l'intérêt des vues matérialisées par rapport aux vues normales...

    Il y a un moyen de faire des vues matérialisées avec des colonnes obtenues par des select un peu complexes (et encore, là, ça va...) ? Je fais comment ?

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Oui mais ce bout de code c'est vraiment 0/20 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      SELECT DISTINCT tableprincipale.PK_tableprincipale,
      (SELECT libelle FROM tablelibelle WHERE PK_tablelibelle=FK_libelle) AS libelle
      FROM tableprincipale
    Vous n'avez jamais entendu parler des jointures ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT tp.PK_tableprincipale,
           tl.libelle
      FROM tableprincipale tp
           INNER JOIN tablelibelle tl
             ON tl.PK_tablelibelle = tp.FK_libelle
    Les requêtes scalaires sont, dans 99% des cas, inutiles et tueuses de performances.
    Certaines applications demandant des temps d'affichage rapides peuvent en profiter.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Ah, j'ignorais ce détail concernant les problèmes de performance des requêtes scalaires
    Merci pour l'information.

    Ceci dit, cela ne marche toujours pas avec ce select. Lorsque je crée ma vue normale, tout va bien, et par contre, pour la vue matérialisée, j'ai une erreur, un peu plus difficile à interpréter pour moi :
    ORA-01031 : privilèges insuffisants.
    01031-00000 - "insuficient privileges"
    *Cause : An attempt was made to change the current username or password without the appropriate privilege. This error also occurs if attempting to install a database without the necessary operating system privileges.
    When Truster Oracle is configure in DBMS MAC, this error mayu occur if the user was granted the necessary privilege at a higher label than the current login.


    Bref, on dirait un problème d'administration de la base. Ou je me trompe ?

    Merci pour vos réponses

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Bonjour,

    La création de vues matérialisées nécessite des droits particuliers, idem pour l'utilisation du REFRESH ON COMMIT et du REFRESH FAST.
    Essayez peut être de trouver un tutorial la dessus, vous gagnerez du temps.

Discussions similaires

  1. Cimplicity: création des points et animation des vues
    Par marcoussi dans le forum Projets
    Réponses: 0
    Dernier message: 03/08/2011, 17h07
  2. Création d'une Miniature d'une vue OpenGL
    Par Knacki dans le forum C++Builder
    Réponses: 6
    Dernier message: 24/03/2011, 15h43
  3. Création d'une nouvelle base non vue par DBASTUDIO
    Par union dans le forum Administration
    Réponses: 1
    Dernier message: 16/10/2008, 16h25
  4. Création de menus contextuels dans une vue
    Par nouhaben dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 11/06/2008, 09h15
  5. [vues] creation d'une vue combinant 2 colonnes de la table
    Par gloogloo dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 29/06/2005, 14h16

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