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 :

Suffixage automatique de table à l'exécution


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Par défaut Suffixage automatique de table à l'exécution
    Bonjour à tous.

    Je reviens de vacances, et j'ai un collègue qui est parti en vacances, et qui a suggéré (pendant mon absence) d'utiliser une méthode SQL de sélection automatique de table, que je présente dans un instant. Mon collègue ayant parlé de cela pendant mes vacances, et étant parti avant mon retour, je n'ai pas pu lui demander davantage d'informations.

    L'idée qu'il a suggérée, et dont j'ignore s'il s'agit d'Oracle ou de SQL natif, consiste à forcer le moteur de la base de donnée à utiliser une table si elle existe avec un suffixe donné, ou à utiliser la table sans suffixe si la table suffixée n'existe pas. J'explique par un exemple :

    J'ai une table Toto et une table Toto_2007. Dans la table Toto, j'ai toutes mes données. Dans la table Toto_2007, j'ai les données de l'année 2007 uniquement.
    Je voudrais que ma requête, qui fait un "select * from Toto where ..." aille chercher dans Toto_2007 si je pose un filtre sur l'année 2007 dans ma clause Where, mais aille chercher dans Toto si l'année est différente de 2007.

    Je cherche donc des informations sur cet outil dont j'ignorais jusqu'à l'existence.

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Par défaut
    Citation Envoyé par Agifem
    Bonjour à tous.

    Je reviens de vacances, et j'ai un collègue qui est parti en vacances, et qui a suggéré (pendant mon absence) d'utiliser une méthode SQL de sélection automatique de table, que je présente dans un instant. Mon collègue ayant parlé de cela pendant mes vacances, et étant parti avant mon retour, je n'ai pas pu lui demander davantage d'informations.

    L'idée qu'il a suggérée, et dont j'ignore s'il s'agit d'Oracle ou de SQL natif, consiste à forcer le moteur de la base de donnée à utiliser une table si elle existe avec un suffixe donné, ou à utiliser la table sans suffixe si la table suffixée n'existe pas. J'explique par un exemple :

    J'ai une table Toto et une table Toto_2007. Dans la table Toto, j'ai toutes mes données. Dans la table Toto_Janvier, j'ai les données de l'année 2007 uniquement.
    Je voudrais que ma requête, qui fait un "select * from Toto where ..." aille chercher dans Toto_2007 si je pose un filtre sur l'année 2007 dans ma clause Where, mais aille chercher dans Toto si l'année est différente de 2007.

    Je cherche donc des informations sur cet outil dont j'ignorais jusqu'à l'existence.
    c'est pas très claire cette histoire
    je penche pour une utilisation des objets synonymes, c'est peut être pas plus compliqué que cela

    sinon, ...

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    A moins qu'il pensait à partitionner la table sur l'année. Dans ce cas, dès que tu fais un where sur une valeur de la colonne de partition, Oracle n'accède qu'à cette partition, sinon il accède à toute la table (toutes les partitions).

    En tous cas, j'ai l'impression que ton collègue t'a bien mis dans la merde avant de partir...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Par défaut
    D'abord, merci de vos réponses. Effectivement, mon collègue m'a laissé une belle énigme. Connaissant l'un et l'autre, je sais qu'il ne s'agit ni de synonyme, ni de partitionnement.

    L'idée est que c'est Oracle qui choisit d'utiliser la table Toto_2007 alors que la table Toto existe, qu'il n'y a pas de synonyme, pas de partitionnement, que la requête est écrite pour faire un select sur Toto, mais que Toto et Toto_2007 ont la même structure, et que Toto_2007 ne contient pas les mêmes données que Toto. J'aimerais être plus clair, mais je ne sais pas très bien comment exprimer mon idée.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 7
    Par défaut
    Bon, j'ai fini par trouver de quoi il s'agit. Si Toto est une table, Toto_2007 est en fait une vue matérialisée créée sur le script "as select * from Toto where année = 2007". Quand une requête est lancée sur Toto avec cette clause Where, et que la vue matérialisée est fraîche, Oracle choisit d'utiliser la vue matérialisée. Bon à savoir, mais la méthode a des failles.

    Peut-être cet élément servira-t-il à certains. Merci encore pour le temps que vous m'avez consacré.

  6. #6
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    le partitionnement est fait pour ça... ça me parait un peu cavalier de vouloir utiliser ce type de priorité qui peut changer au prochain upgrade

    ton collégue n'aurait il pas essayer de vulgariser le concept de partition à un interlocuteur qui n'est pas technique ?

  7. #7
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Ton collègue a bien fait de partir en vacances ! Il en avait besoin

  8. #8
    Membre chevronné Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Par défaut
    Pas si que ça le collégue ! ! !

    Selon moi il parlait plutot du QUERY REWRITE que du partitionnement

    http://www.oracle.com/technology/pro...10gr1_1203.pdf

    Dans l'exemple simple donné, effectivement, il vaut mieux faire du partionnement puisque qu'il s'agit d'un simple filtre par ans. Mais le but du QUERY REWRITE est de faire des choses plus compliquée comme des agrégats et de ne pas avoir a les recalculer a chaque fois.

    Maintenant, je ne sais pas si l'algo de reconnaissance des clauses where est efficace et si Oracle reconnait bien à chaque fois qu'il doit passer par Materialized View plutot que par la table.

  9. #9
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Par défaut Query Rewrite
    J'étais interessé par le lien de Wurlitzer
    http://www.oracle.com/technology/pro...10gr1_1203.pdf
    mais impossible de l'atteindre :
    An error occurred while processing the request. Try refreshing your browser. If the problem persists contact the site administrator
    l'URL est elle correcte ?
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Chez moi ça marche.

    Je l'ai uploadé (et renommé) sur mon site http://macmogan.info/Perso/query_rewrite_10gr1.pdf

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2006, 20h38
  2. Purger automatiquement une table
    Par yanis97 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/10/2005, 21h38
  3. [VBA] Attache automatique des tables
    Par bestall666 dans le forum Access
    Réponses: 4
    Dernier message: 14/05/2005, 12h42
  4. alimenter automatiquement une table access
    Par Mickey34 dans le forum Access
    Réponses: 8
    Dernier message: 24/11/2004, 17h55
  5. création automatique de table avec createdb??
    Par champion dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/09/2004, 09h01

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