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 :

Contraint not null


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Vince7-7
    Homme Profil pro
    Fondateur et dirigeant de la société Oramatica. http://www.oramatica.com
    Inscrit en
    Janvier 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Fondateur et dirigeant de la société Oramatica. http://www.oramatica.com

    Informations forums :
    Inscription : Janvier 2007
    Messages : 125
    Par défaut Contraint not null
    Bonjour
    J'ai un problème avec une requète d'update. La version d'Oracle est la 9.2.0.8
    Le serveur est un HPUX64.
    En fait je charge des tables via SQLLOADER. A partir de ces tables je fais soit un update soit un insert. Pour l'insert aucun problème par contre lors de l'update je me retrouve avc une erreur ORA-01407: cannot update <colonne> TO NULL. Sachant que la table servant au chargement possède les mêmes contraintes et par conséquent les colonnes( parce qu'il y en a plusieurs pour les quels ça arrive) incriminées ne le sont pas. D'autre part la requète se fait de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    update table 
    set (c1,C2,CX....)=(select c1,C2,CX... 
                              from table2 
                              where T1.PK=T2.PK);
    Ca fait deux jours que je suis dessus et je ne comprend pas

    AU SECOURS!!!

  2. #2
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    C'est ton update qui est mal fait, ta clause where est sur ta table2 et pas sur la table1 donc tu veux mettre à jour toutes les lignes de ta table1. Donc pour les lignes de ta T1 pour lesquels tu n'as pas de correspondance en T2, ca revient à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE T1 SET (COL1,COL2,COL3...) = (NULL, NULL, NULL,...)
    Il faut que tu testes l'existence de ta pk sur la table2 et que tu t'en sers pour filtrer ta table1 comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE T1
    SET (COL1,COL2,COL3...) = (SELECT COL1, COL2,COL3 FROM T2 WHERE T1.PK = T2.PK)
    WHERE EXISTS (SELECT 1 FROM T2 WHERE T2.PK=T1.PK)

  3. #3
    Membre confirmé Avatar de Vince7-7
    Homme Profil pro
    Fondateur et dirigeant de la société Oramatica. http://www.oramatica.com
    Inscrit en
    Janvier 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Fondateur et dirigeant de la société Oramatica. http://www.oramatica.com

    Informations forums :
    Inscription : Janvier 2007
    Messages : 125
    Par défaut
    Bonjour.
    Merci de ta réponse mais ça ne va pas mieux. En regardant le plan d'exécution je m'aperçois que j'ai un coût de 3917 parce qu'il fait un full sur la table à mettre à jour. D'ou ma question y a-t-il un moyen d'accéder différement à cette table sachant que j'utilise la PK pour faire ma jointure.

  4. #4
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Avant de dire que cela ne va pas mieux, il faut vérifier que l'index ne soit pas pire que le full
    Repasse ton ordre en mettant un hint pour utiliser ton index et compare les consos avec la vue v$sqlarea

    Edit : et puis, c'est pas gentil de dire que c'est pas mieux, ca plante plus maintenant, non ?

  5. #5
    Membre confirmé Avatar de Vince7-7
    Homme Profil pro
    Fondateur et dirigeant de la société Oramatica. http://www.oramatica.com
    Inscrit en
    Janvier 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Fondateur et dirigeant de la société Oramatica. http://www.oramatica.com

    Informations forums :
    Inscription : Janvier 2007
    Messages : 125
    Par défaut
    Ok c'était pas gentil. Ca ne plante effectivement plus. Donc déja pour ça merci! Par contre je me retrouve avec un énorme problème de perf ou pour updater environ 50 0000 lignes il mets plus 1H40. Donc si tu as une idée ou une suggestion je suis preneur.

  6. #6
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Je plaisantais pour le coup du "pas gentil"

    Il faudrait que tu nous postes le plan d'exécution de ta requête pour qu'on puisse mieux comprendre

Discussions similaires

  1. Ajouter la contrainte NOT NULL en utilisant ALTER TABLE
    Par la_poupee_irradiee dans le forum Développement
    Réponses: 4
    Dernier message: 23/06/2009, 22h21
  2. Alter table pour l'ajout de contrainte not null
    Par jean sami dans le forum SQL
    Réponses: 6
    Dernier message: 18/09/2008, 17h42
  3. [9i] Contrainte NOT NULL
    Par Ito dans le forum Administration
    Réponses: 20
    Dernier message: 11/07/2007, 13h13
  4. Ajouter une contrainte NOT NULL à une colonne
    Par abdelghani_k dans le forum Firebird
    Réponses: 1
    Dernier message: 03/06/2007, 16h26
  5. Ajouter la contrainte NOT NULL a une colone [Firebird 1.5]
    Par crocodingo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2004, 18h52

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