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

Oracle Discussion :

[8i] CREATE / DROP SEQUENCE + SYNONYM


Sujet :

Oracle

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut [8i] CREATE / DROP SEQUENCE + SYNONYM
    Bonjour tout le monde,

    Sur une base Oracle 8i, je cherche à créer une sequence que j'utiliserai dans un trigger before insert sur une de mes tables.
    En faisant des recherches avancées sur ce forum j'ai trouvé la syntaxe des 2 commandes SQL que j'ai testées sous SQL*Plus => OK.

    Ensuite, j'ai déclaré cette séquence et ce trigger pour tous les schémas de ma base oracle 8i qui sont des synonymes => OK.

    Depuis il m'est impossible de supprimer et de recréer "localement" cette sequence sous SQL*Plus :
    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
    20
    21
    22
    23
    24
    25
    26
    SQL> select seq_an_code.nextval
      2  from dual;
    select seq_an_code.nextval
           *
    ERROR à la ligne 1 :
    ORA-02289: sequence does not exist
     
     
    SQL> drop sequence seq_an_code;
    drop sequence seq_an_code
                  *
    ERROR à la ligne 1 :
    ORA-02289: sequence does not exist
     
     
    SQL> create sequence seq_an_code start with 1 increment by 1;
    create sequence seq_an_code start with 1 increment by 1
                    *
    ERROR à la ligne 1 :
    ORA-00955: name is already used by an existing object
     
    SQL> drop trigger ti_an_code;
    drop trigger ti_an_code
    *
    ERROR à la ligne 1 :
    ORA-04080: trigger 'TI_AN_CODE' does not exist
    Mes questions sont donc les suivantes :
    1/ comment fonctionnent les synonymes ? A quoi servent-ils ? Quels changement induisent-ils dans les autres commandes (DDL) ?
    2/ quel est l'objet (quel est le synonyme) qui m'empêche de créer la sequence seq_an_code ?

    Merci de m'éclairer et surtout n'hésitez pas à détailler

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Quand vous essayez de select/drop une sequence et que vous avez le retour "does not exist" cela signifie :
    • soit que l'objet n'existe pas
    • soit que vous n'avez pas les droits dessus


    Le synonym a quant a lui exactement le même rôle que les raccourcis sous Windows : c'est un autre moyen, plus rapide (en général) d'accéder à des objets mais en aucun cas, il ne donne le droit de les utiliser !

    En général, un synonym permet d'éviter de repréciser à chaque fois le schéma propriétaire.
    Si vous souhaitez lever toute ambiguité, préfixer systématiquement (notamment pour les opérations de drop/create)

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Merci pour ces explications on ne peut plus claires.

    Je déduis de vos explications que la séquence SEQ_AN_CODE existe toujours et j'obtiens un message stipulant que cet objet n'existe pas lorsque je tente de faire un SELECT ou un DROP dessus car je ne dispose pas des droits suffisants.
    Remarque : je ne dois pas être trop loin de la vérité car en effectuant une recherche de SEQ_AN_CODE sur le schéma depuis lequel je travaille sous SQL*Plus alors il trouve bien un objet de type SYNONYM.

    Par conséquent, si j'accorde les droits nécessaires je devrais pouvoir supprimer / utiliser cette séquence ?
    Le problème c'est que je ne sais pas quel est le schéma propriétaire de cette séquence (en reprenant votre analogie, si je choisis un de mes raccourcis windows alors pour attribuer des droits il faut que détermine où est stocké l'objet référencé) donc je ne sais pas comment effectuer mon grant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> grant all privileges on seq_an_code to cyril;
    grant all privileges on seq_an_code to cyril
                            *
    ERROR à la ligne 1 :
    ORA-00942: table or view does not exist
     
     
    SQL> grant all privileges on sequence seq_an_code to cyril;
    grant all privileges on sequence seq_an_code to cyril
                                     *
    ERROR à la ligne 1 :
    ORA-00905: missing keyword
    oracle est-il sensible à la casse concernant les noms des objets dont les séquences ?

    [EDIT]je pense à une chose : est-il possible que le synonyme de cette séquence (?) existe alors que la séquence n'existe plus physiquement ?
    Aurtement dit, en reprenant encore votre analogie, le fait de supprimer un fichier n'implique la suppression de tous les raccourcis associés ![/EDIT]

  4. #4
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Oui, le synonym peut exister alors que l'objets n'existe plus. ;-)

    Il faut consulter les vue DBA_SYNONYMS et DBA_SEQUENCES pour savoir quels sont les objets qui existent et à qui ils appartiennent.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ah bon d'accord.

    En parallèle j'ai supprimé les références orphelines en passant par la console oracle et par conséquent le nom "SEQ_AN_CODE" est à nouveau disponible sous SQL*Plus (par exemple) : je peux faire un CREATE puis un SELECT et même un DROP

    Concernant votre dernier post, je comprends bien que je peux déterminer, via ces 2 tables systèmes, les références orphelines et les owner de celles-ci.
    Cependant, est-ce qu'un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DROP SEQUENCE <owner>.<reference_orpheline>;
    sous SQL*Plus produira le même résultat que sous la console oracle (je n'ai pas pu visualiser l'ordre SQL de suppression) ?

    Merci encore pour votre aide.

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

Discussions similaires

  1. grant create sequence / grant create any sequence
    Par bul21 dans le forum Administration
    Réponses: 2
    Dernier message: 18/05/2009, 18h29
  2. validate | update | create | create-drop
    Par *alexandre* dans le forum Hibernate
    Réponses: 2
    Dernier message: 03/02/2009, 21h09
  3. NHibernate - Def Property : Create-Drop
    Par Rome dans le forum NHibernate
    Réponses: 0
    Dernier message: 11/12/2008, 12h34
  4. NHibernate - Def Prop : Create-Drop
    Par Rome dans le forum Développement
    Réponses: 1
    Dernier message: 11/12/2008, 12h20
  5. Drop Sequence If Exists
    Par *alexandre* dans le forum Oracle
    Réponses: 2
    Dernier message: 19/02/2007, 17h43

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