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 :

Différence entre tab.schema tab@schema


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 145
    Par défaut Différence entre tab.schema tab@schema
    Bonjour à tous.

    Je suis actuellement dans la maintenance et le développement d'une appli avec une base Oracle.

    Y a des vues et des schémas différents.
    En schema j'ai BUDGET_2009, BUDGET_2010, BUDGET_2011
    Et des vues...

    Pourquoi parfois j'ai par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ... BUDGET_2010.TABLE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select une_vue_view@BUDGET_2010
    Sur une requête j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ... BUDGET_2011.TABLE
    Ça me retourne une erreur :
    "table or view does not exist" alors que le dblink existe, la vue aussi et que la même requête, exactement la même mais avec le schéma :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ... BUDGET_2010.TABLE
    fonctionne.
    Si je mets pour 2011:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ... TABLE@BUDGET_2011
    là ça fonctionne...

    Bref j'ai du mal à comprendre si quelqu'un pouvait m'éclairer sur la syntaxe entre les vues, schémas, table et les . ou les @ dans quel cas utiliser une forme plutôt que l'autre, je suis preneur

    Merci à tous.

  2. #2
    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
    l'expression complète est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [NOM DU SCHEMA.]Nom de la table/vue[@DBLINK]
    donc quand il y a un @, c'est que tu vas aller chercher sur une autre base

    Quand il y a un . c'est que tu vas chercher dans un schéma particulier.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 145
    Par défaut
    Merci McM j'y vois plus clair

    Mais dans ce cas j'ai une autre question.
    J'ai donc 2 schemas EBUDGET_2010 et EBUDGET_2011.
    Pourquoi si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ... EBUDGET_2010.table
    OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ... EBUDGET_2011.table
    KO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ... table@EBUDGET_2011
    OK

    Pourtant EBUDGET_2011 est un schemas donc je devrais pas mettre @EBUDGET_2011 pour que ca fonctionne. Et pourtant EBUDGET_2011.table ca fonctionne pas alors que EBUDGET_2010.table c'est ok...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    Bonjour,

    Disons que c'est la meme difference qu'entre demander une info a son collegue de bureau, et aller la demander a une personne qui est dans un autre batiment.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    TMP2@minilhc >select count(*) from tmp.tmp;
     
      COUNT(*)
    ----------
         99999
     
     
    TMP2@minilhc >select count(*) from tmp@my_link2;
     
      COUNT(*)
    ----------
             2
     
     
    TMP2@minilhc >select count(*) from tmp;
    select count(*) from tmp
                         *
    ERROR at line 1:
    ORA-00942: table or view does not exist
    Dans le premier cas, j'ai un utilisateur 'TMP' qui existe avec son schema sur la meme BdD que l'utilisateur TMP2. Je precise donc que je veux co;pter les lignes de la table 'TMP' de l'utilisateur appele TMP.

    Dans le second cas, j'utilise une base totalement differente. Ca ete defini a quel base je me connectais lors de la creation du db-link
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE  DATABASE LINK <link_name>
     CONNECT TO <user_name_on_remote_DB> IDENTIFIED BY <his_password> 
     USING '<service_name>';
    Et dans le 3eme cas, comme je precise rien, je regarde sur la table TMP de l'utilisateur courant. Ce qui revient a faire SELECT count(*) from TMP2.TMP;
    Malheureusement, cette table n'existe pas pour cet utilisateur la.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 145
    Par défaut
    Merci Rams7s, je comprends bien les histoires de schemas, link mais y a encore des choses qui me tracassent.
    En fait doit-on créer un link entre 2 schemas?
    Dans ton premier cas tu comptes donc le nb de ligne de la table TMP de l'utilisateur TMP en étant TMP2 ok. Mais faut-il pour cela créer un link entre les deux schemas? Ou le fait que ce soit la même base la lecture est possible par defaut?

    Aussi autre question, entre deux bases A et B. Si je veux que A puisse lire sur B.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A> SELECT count(*) FROM tab@my_link2;
    avec un dblink bien sur. Faut créer le DBlink sur A pour lire B. Ou le créer sur B pour autoriser A à venir lire? Ou sur les deux bases?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Il faut le créer dans la base qui va l'utiliser bien entendu, donc dans A

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 145
    Par défaut
    Ok merci pour vos réponses
    Je comprends beaucoup mieux.
    Entre temps j'ai trouvé d'ou venait mon problème.

    Sur mon schema EBUDGET j'ai des utilisateurs EBUDGET_2009, EBUDGET_2010, EBUDGET_2011 (qui sont des schemas) avec pour chaque utilisateur deux tables.
    Or pour l'utilisateur EBUDGET_2011 je vois qu'une table, c'est pour ca qu'il me marque "table or view does not exist" lorsque j'interroge cette fameuse table qu'il ne voit pas. Alors qu'il voit l'autre...
    Comment faire pour que les deux tables apparaissent?

  8. #8
    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
    Il faut que le propriétaire de la table donne le droit de voir la table (grant select)

    Maintenant, si les 2 tables sont normalement créées dans chaque schéma, et que l'utilisateur EBUDGET_2011 n'en possède qu'une.. alors c'est qu'il manque simplement la table.

    maintenant le plus simple c'est de voir les objets au niveau base (avec le propriétaire). A faire en tant qu'utilisateur ayant le rôle dba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT owner, table_name
      FROM all_tables  
      WHERE table_name = 'TATABLE'

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 145
    Par défaut
    Merci McM, j'ai effectivement donné les droits à EBUDGET de voir la table en question du schema EBUDGET_2011 et ca marche

    Bon et bien le sujet est résolu, merci à tous et bonnes vacances pour ceux qui partent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre USER et SCHEMA ?
    Par Bounty Killer dans le forum Oracle
    Réponses: 19
    Dernier message: 18/07/2014, 08h35
  2. Réponses: 6
    Dernier message: 01/04/2013, 16h55
  3. Différence entre DATABASE et SCHEMA
    Par lightstring4 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/12/2009, 11h21
  4. quelle différence entre mondrian et mondrian schema workbench
    Par helene0618 dans le forum Autres outils décisionnels
    Réponses: 3
    Dernier message: 19/03/2009, 09h43
  5. Différence entre tab**, *tab[] et tab[][]
    Par Dud225 dans le forum C
    Réponses: 3
    Dernier message: 10/04/2007, 09h42

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