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

Administration Oracle Discussion :

ORA-00942, sur un database link dans le trigger


Sujet :

Administration Oracle

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut ORA-00942, sur un database link dans le trigger
    J'ai un problème que je suis incapable de savoir la raison, ainsi que la solution. J'explique avec l'exemple que j'essaie de tout simplement lire une base à distance avec un trigger. Le problème est du faite qui me met : Table or View not exist. Voici tout les éléments en code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE TRIGGER Aj_M_S1 
    INSTEAD OF INSERT
    ON V_V1_MEMBRE
    FOR EACH ROW
    declare
    	conti varchar2(32);
            conti2 varchar2(32);
    Begin
    select continent into conti from PAYS where :New.Nompays = NomPays;
    select continent into conti2 from PAYS@testsg107662 where :New.Nompays = NomPays;
    End;
    /
    show errors;
    Errors for TRIGGER AJ_M_S1:

    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    6/1 PL/SQL: SQL Statement ignored
    6/35 PL/SQL: ORA-00942: table or view does not exist

    Si j'enlève la ligne contenant le database link PAYS@testsg107662, le trigger marche parfaitement. Toujours dans le même ordinateur, je fais les descriptions des tables pour vérifier mes datalinks.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> desc pays;
     Name                                       Null?                 Type
     ----------------------------------------- -------- ---------------------------- 
    NOMPAYS                            NOT NULL        VARCHAR2(32)
     CONTINENT                                                 VARCHAR2(32)
     
    SQL> desc pays@testsg107662;
     Name                                      Null?                  Type
     ----------------------------------------- -------- ---------------------------- 
    NOMPAYS                           NOT NULL        VARCHAR2(32)
     CONTINENT                                                VARCHAR2(32)
    Encore mieux, j'arrive à créer une vue entre ces deux table sans aucun problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create or replace view v_pays as
    SELECT * FROM PAYs union select * from pays@testsg107662;  2
     
    View created.
    Et aussi, si je tape : select * from pays@testsg107662; il n'a aucun problème, il y a juste un probleme de trigger et je ne vois pas la solution. Les deux tables ont les même valeurs au niveau base de donnée.

    Quelqu'un aurait une solution? ca serait sympa... Merci d'avance....

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Quand quelque chose marche en SQL et ne marche pas en PL/SQL, cela peut-être lié au fait que les rôles ne sont pas activés en PL/SQL.

    Il faudrait savoir comment est créé le database link et comments sont attribués les droits sur la table distante.

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut
    merci pour ce début de réponse qui m'interroge en effet.

    les databaseslinks sont crées par l'user car je lui est mis les droits.

    grant create database link to user;

    Et l'utilisateur fait un create database link en private, seulement pour lui.

    Aucune restriction de la table a distance, car c'est le même utilisateur qui l'utilise. Il s'agit juste un test pour voir si on arrive à lire une table à distance mais ceci est impossible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create database link testsg107662 connect to "user" identified by "password" using 'testsg107662';
    testsg107662 a été fait sur netca et le test a confirmé que tout marché.

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Il faudrait savoir comment sont donnés les droits à "user" sur la table pays@testsg107662. J'ai trouvé une discussion intéressante sur AskTom qui en fait dit que les ordres SQL lancés en PL/SQL sur un lien utilisent en fait les rôles par défaut attribués à l'utilisateur distant (non, ce n'est pas un bug !).

    Que donne pour "user" sur la base distante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from session_roles
    Quelles sont les versions des bases source et cible ?

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2003
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 69
    Points : 59
    Points
    59
    Par défaut
    Quelles sont les versions des bases source et cible ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP and Data Mining options
    Que donne pour "user" sur la base distante:
    Code :
    select * from session_roles
    Base Distant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> select * from session_roles;
     
    ROLE
    ------------------------------
    CONNECT
    RESOURCE
    Base Source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> select * from session_roles;
     
    ROLE
    ------------------------------
    CONNECT
    RESOURCE
    SELECT_CATALOG_ROLE
    HS_ADMIN_ROLE
    Peut-être il s'agit bien des problèmes des rôles, je vais me documenter sur ceci. Merci pour le lien je vais regarder pour voir

Discussions similaires

  1. ORA-00942 lors de la création d'un trigger
    Par Daeron dans le forum Oracle
    Réponses: 14
    Dernier message: 06/07/2012, 15h17
  2. ORA-00942 sur table objet
    Par miniworker dans le forum Import/Export
    Réponses: 1
    Dernier message: 03/08/2010, 11h55
  3. Est-ce que c'est possible de créer un DATABASE LINK dans MySQL ?
    Par dariyoosh dans le forum Administration
    Réponses: 0
    Dernier message: 02/02/2010, 10h30
  4. [ORA-00942] DBA_TAB_PRIVS dans une fonction
    Par yac dans le forum Oracle
    Réponses: 2
    Dernier message: 26/01/2006, 21h43
  5. Erreur ORA-12514 avec database link
    Par gafreu dans le forum Administration
    Réponses: 20
    Dernier message: 09/09/2004, 11h53

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