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

PL/SQL Oracle Discussion :

Utiliser un schema dynamiquement dans une requête


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 182
    Par défaut Utiliser un schema dynamiquement dans une requête
    Bonjour,

    Je voudrais pouvoir utiliser dans une requête un nom de schéma dynamique en fonction des conditions de cette même requête.
    Je m'explique :
    J'ai une table SHEMA1.MES_CLIENTS (ID, SUFFIXE_SCHEMA)
    une table SHEMA1.FACTURE (ID, CLIENT, PRIX, DEVISE,TYPEDEVISE)
    une table SHEMA_x.DEVISE(ID, LIBELLE,TYPEDEVISE) où "x" est dynamique en fonction du suffixe de la table MES_CLIENTS

    Et je voudrais pouvoir faire une requête du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE (select fa.devise,fa.type_devise,fa.prix,mc.SUFFIXE FROM SHEMA1.FACTURE fa join SHEMA1.MES_CLIENTS mc ON mc.ID=fa.CLIENT) a SET a.DEVISE = (select d.ID from ("SHEMA_" || a.SUFFIXE).DEVISE d where a.TYPEDEVISE=d.TYPEDEVISE) where  a.PRIX > 0
    Est-ce possible ?

    Merci.

  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
    Directement dans une requête non, mais vous pouvez par contre générer votre requête avec du PL/SQL par concaténation de chaîne, puis exécuter le résultat.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 227
    Par défaut
    Mauvais modèle de donnée, donc galère.

    J'imagine que la liste des tables schema_x ne bouge jamais, ou quasiment.
    Tu peux contourner le problème. Solution de contournement, donc pas terrible...

    Tu crées une fois pour toutes une vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create view schema_tous as
    select 'SUF1' as suffixe , devise from schema_SUF1
    union
    select 'SUF2' as suffixe , devise from schema_SUF2
    union
    select 'SUF3' as suffixe , devise from schema_SUF3  etc
    A adapter bien sûr en fonction de ta liste de schémas.
    Et ensuite, tu pourras faire ta requete assez facilement.

    Bien entendu, il ne faudra pas oublier de re-créer cette vue à chaque fois qu'un nouveau schema_X est créé.

  4. #4
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Tu marques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE (select fa.devise,fa.type_devise,fa.prix,mc.SUFFIXE FROM SHEMA1.FACTURE fa join SHEMA1.MES_CLIENTS mc ON mc.ID=fa.CLIENT)
    mais en SQL l'UPDATE porte sur une table ou une vue alors que là ton SELECT retourne plusieurs valeurs
    On aura comme résultat UPDATE euro, type, 250 SET ... ce qui est impossible

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 182
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    ce qui est impossible
    Ok... mais du coup, qu'est-ce qui serait possible dans la même idée ?

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 182
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Mauvais modèle de donnée, donc galère.

    J'imagine que la liste des tables schema_x ne bouge jamais, ou quasiment.
    Tu peux contourner le problème.
    Je vais voir si cela convient et si oui, je mettrais la solution définitive ici, merci.

  7. #7
    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
    Attention, mettre un UNION ALL et pas un UNION (qui fait un distinct)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create view schema_tous as
    select 'SUF1' as suffixe , devise from schema_SUF1
    union all
    select 'SUF2' as suffixe , devise from schema_SUF2
    union all ...

Discussions similaires

  1. Utiliser la fonction sha1 dans une requête
    Par madevilts dans le forum PL/SQL
    Réponses: 31
    Dernier message: 22/08/2008, 15h15
  2. [Dates] injecter une variable dynamique dans une requête
    Par omar071286 dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2008, 09h51
  3. Utilisation d'un combobox dans une requête
    Par k_boy dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/03/2008, 09h06
  4. Réponses: 7
    Dernier message: 08/02/2008, 10h35
  5. Utilisation d'un tableau dans une requête
    Par stigma dans le forum Access
    Réponses: 2
    Dernier message: 20/12/2007, 10h42

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