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 :

[SQL] INITIALLY DEFERRED DEFERRABLE


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 30
    Par défaut [SQL] INITIALLY DEFERRED DEFERRABLE
    Bonjour,

    j'ai besoin d'une contrainte différée sur une de mes tables.
    pour ce faire lors de la création de ma contrainte (foreign key) j'ai utilisé le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ALTER TABLE WEBSESSION ADD (
      CONSTRAINT WEN_UTR_FK FOREIGN KEY (WS_ID_USER) 
        REFERENCES USERS (US_ID_USER) INITIALLY DEFERRED DEFERRABLE);
    Mais si je fais un insert en omettant ma clé étrangère, j'obtiens l'erreur : cannot insert null ...

    Pourtant avec la clause INITIALLY DEFERRED DEFERRABLE il devrait désactiver la contrainte jusqu'au commit non ? : :

    Merci d'avance

    Olivier

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Vous montrez une contrainte d'intégrité référentielle (FK), mais vous obtenez un message de non nullité. Ne s'agit-il pas d'une problème de contrainte NOT NULL également sur la colonne ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 30
    Par défaut
    c'est juste, je me suis trompé, c'est sur la contrainte not null que j'aimerais que la vérificatios soit différées. Comment faut-il faire ?


    ALTER TABLE WEBSESSION MODIFY WS_ID_USER NOT NULL INITIALLY DEFERRED DEFERRABLE

    me donne : ORA-02253 constraint specification not allowed here

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Heu.... très honnêtement, je ne vois pas l'utilité de ce que vous souhaitez !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 30
    Par défaut
    en fait j'utilise un ejb entity qui fait l'insertion dans la table malheureusement l'insertion se fait sans la valeur de la clé étrangère. Celle ci est initialisée plus tard mais dans la même transaction.

    Je veux que la contrainte not null soit présente pour le cas où il y aurait des insertions par une autre voie.

    Il y a t-il une solution ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 30
    Par défaut
    j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ALTER TABLE WEBSESSION ADD (
      CONSTRAINT SW_USR_NN CHECK (ws_id_user IS NOT NULL)
        DEFERRABLE INITIALLY DEFERRED);

  7. #7
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Citation Envoyé par Boosters
    c'est juste, je me suis trompé, c'est sur la contrainte not null que j'aimerais que la vérificatios soit différées. Comment faut-il faire ?


    ALTER TABLE WEBSESSION MODIFY WS_ID_USER NOT NULL INITIALLY DEFERRED DEFERRABLE

    me donne : ORA-02253 constraint specification not allowed here
    Retrouvez le nom exact de la contrainte, avant d'essayer de la modifier :
    "WS_ID_USER NOT NULL" me parait louche comme nom de contrainte.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2002
    Messages : 30
    Par défaut
    j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ALTER TABLE WEBSESSION ADD (
      CONSTRAINT SW_USR_NN CHECK (ws_id_user IS NOT NULL)
        DEFERRABLE INITIALLY DEFERRED);

  9. #9
    Membre émérite
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Par défaut
    pourquoi cette contrainte NULL alors qu'il existe déjà une contrainte PRIMARY KEY ???

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

Discussions similaires

  1. Initiation à l'optimisation de requêtes SQL sous ORACLE
    Par Vincent Rogier dans le forum Contribuez
    Réponses: 12
    Dernier message: 30/09/2011, 14h09
  2. Réponses: 3
    Dernier message: 10/07/2008, 16h49
  3. s'initier au PL/SQL => installer Oracle :(
    Par weed dans le forum PL/SQL
    Réponses: 1
    Dernier message: 01/10/2007, 22h45
  4. Réponses: 3
    Dernier message: 12/01/2007, 14h46
  5. S'initier sur Mysql pour faire du SQL Server
    Par bigjeff dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/11/2005, 14h38

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