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 :

[11g] Resultats corrects qu'après export, suppression puis recréation d'une table.


Sujet :

Oracle

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut [11g] Resultats corrects qu'après export, suppression puis recréation d'une table.
    Bonjour,

    Tout d'abord je tiens à préciser que je n'ai pas du tout l'habitude d'utiliser Oracle. ( J'ai juste fait quelques tests aujourd'hui)

    Par deux fois cet après midi, j'ai eu un problème avec des requêtes de tests qui ne donnaient pas le bon résultat.

    Les deux fois, le résultat est devenu correct après avoir exporté (sous sql Developper), supprimé puis récréé la table avec exactement le script de l'export. ( Les tables des deux tests sont différentes)



    Les deux requêtes étaient de ce type (Je sais que ça ne ressemble à rien, mais ce n'est pas pour ça que le résultat ne doit pas être correct...) :
    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
    SELECT idTest15,test15Array,test15Long,test15Int 
    FROM test15_master  
    INNER JOIN 
    (
      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int 
      FROM 
      ( 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
        UNION 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
      )  
      GROUP BY test15Array, test15Long
    )  
    USING ( test15Array,test15Long,test15Int)
    Avant recréation table (KO):
    IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
    -------- ----------- ---------- ---------
    2 user1 100 2
    4 user2 100 2

    Apres avoir recréer la table (OK):
    IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
    -------- ----------- ---------- ---------
    3 user2 50 1
    1 user1 10 1
    4 user2 100 2
    2 user1 100 2

    Quelqu'un a t'il une idée du pourquoi ?

    Merci pour votre aide.

    Au cas ou voici deux requêtes avec leur résultats (OK) que j'ai obtenu lorsqu'il y avait le problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT idTest15,test15Array,test15Long,test15Int 
    FROM test15_master  
    INNER JOIN 
    (
      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int 
      FROM 
      ( 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
      )  
      GROUP BY test15Array, test15Long
    )  
    USING ( test15Array,test15Long,test15Int)
    Resultat OK :
    IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
    -------- ----------- ---------- ---------
    3 user2 50 1
    1 user1 10 1
    4 user2 100 2
    2 user1 100 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int 
      FROM 
      ( 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
        UNION 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
      )  
      GROUP BY test15Array, test15Long
    Resultat OK :
    TEST15ARRAY TEST15LONG TEST15INT
    ----------- ---------- ---------
    user1 10 1
    user2 100 2
    user1 100 2
    user2 50 1

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2002
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 72
    Points : 63
    Points
    63
    Par défaut
    un problème de commit ?
    quand on crée une table il y a un commit implicite, si on fait juste un insert il n'y en a pas.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par bguihal Voir le message
    un problème de commit ?
    quand on crée une table il y a un commit implicite, si on fait juste un insert il n'y en a pas.
    Je ne pense pas, car si c'était un problème de commit, je suppose que cette sous requête n'aurait pas retournée ce résultat :
    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
      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int 
      FROM 
      ( 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
        UNION 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
      )  
      GROUP BY test15Array, test15Long
     
    IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
    -------- ----------- ---------- ---------
    3 user2 50 1 
    1 user1 10 1 
    4 user2 100 2 
    2 user1 100 2

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Fournissez un jeu d’essaie avec les instructions create table, les inserts des enregistrements, etc. et les requêtes que vous avez essayées. Expliquez nous le résultat attendu et montrez-nous (copy/paste) le résultat erroné. Préciser la version d’Oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select banner from v$version;

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Fournissez un jeu d’essaie avec les instructions create table, les inserts des enregistrements, etc.
    Voici le résultat de l'export :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    --------------------------------------------------------
    --  Fichier créé - jeudi-septembre-13-2012   
    --------------------------------------------------------
    --------------------------------------------------------
    --  DDL for Table TEST15_MASTER
    --------------------------------------------------------
     
      CREATE TABLE "TEST_TEST_TEST_1"."TEST15_MASTER" 
       (	"IDTEST15" NUMBER, 
    	"TEST15ARRAY" VARCHAR2(10 BYTE), 
    	"TEST15LONG" NUMBER DEFAULT 0, 
    	"TEST15INT" NUMBER DEFAULT 0
       ) SEGMENT CREATION IMMEDIATE 
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "SYSTEM" ;
    REM INSERTING into TEST_TEST_TEST_1.TEST15_MASTER
    SET DEFINE OFF;
    Insert into TEST_TEST_TEST_1.TEST15_MASTER (IDTEST15,TEST15ARRAY,TEST15LONG,TEST15INT) values ('1','user1','10','1');
    Insert into TEST_TEST_TEST_1.TEST15_MASTER (IDTEST15,TEST15ARRAY,TEST15LONG,TEST15INT) values ('2','user1','100','2');
    Insert into TEST_TEST_TEST_1.TEST15_MASTER (IDTEST15,TEST15ARRAY,TEST15LONG,TEST15INT) values ('3','user2','50','1');
    Insert into TEST_TEST_TEST_1.TEST15_MASTER (IDTEST15,TEST15ARRAY,TEST15LONG,TEST15INT) values ('4','user2','100','2');
    --------------------------------------------------------
    --  DDL for Index TEST15_MASTER_PK
    --------------------------------------------------------
     
      CREATE UNIQUE INDEX "TEST_TEST_TEST_1"."TEST15_MASTER_PK" ON "TEST_TEST_TEST_1"."TEST15_MASTER" ("IDTEST15") 
      PCTFREE 10 INITRANS 2 MAXTRANS 255 
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "SYSTEM" ;
    --------------------------------------------------------
    --  Constraints for Table TEST15_MASTER
    --------------------------------------------------------
     
      ALTER TABLE "TEST_TEST_TEST_1"."TEST15_MASTER" MODIFY ("TEST15INT" NOT NULL ENABLE);
      ALTER TABLE "TEST_TEST_TEST_1"."TEST15_MASTER" MODIFY ("TEST15LONG" NOT NULL ENABLE);
      ALTER TABLE "TEST_TEST_TEST_1"."TEST15_MASTER" ADD CONSTRAINT "TEST15_MASTER_PK" PRIMARY KEY ("IDTEST15")
      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "SYSTEM"  ENABLE;
      ALTER TABLE "TEST_TEST_TEST_1"."TEST15_MASTER" MODIFY ("IDTEST15" NOT NULL ENABLE);
    Mais je rappel qu’après avoir lancé ce script le problème à disparu.

    Citation Envoyé par mnitu Voir le message
    et les requêtes que vous avez essayées. Expliquez nous le résultat attendu et montrez-nous (copy/paste) le résultat erroné.
    Dans mon post initial, il y a les trois requêtes que j'ai essayé ainsi que les résultats OK / KO


    Citation Envoyé par mnitu Voir le message
    Préciser la version d’Oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select banner from v$version;
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
    PL/SQL Release 11.2.0.2.0 - Production
    CORE 11.2.0.2.0 Production
    TNS for 32-bit Windows: Version 11.2.0.2.0 - Production
    NLSRTL Version 11.2.0.2.0 - Production

    Je vais essayer de reproduire le problème en refaisant ce que j'ai fait hier :
    - Créer les tables depuis mon application
    - Puis rentrer les données à la main avec sqldevelopper.

    Il y a t'il des logs à activer au cas oû le problème réapparaîtrais ?
    J'ai trouvé un repertoire log, mais pour l'instant les fichiers ne contiennent que :
    Oracle Database 11g Clusterware Release 11.2.0.2.0 - Production Copyright 1996, 2010 Oracle. All rights reserved.
    2012-09-14 15:15:56.054: [ default][3608]ut_read_reg:2:ocr registry key SOFTWARE\Oracle\olr cannot be opened. error 2
    [ CLSE][3608]clse_get_crs_home: Error retrieving OLR configuration [0] [Error opening olr registry key. Le fichier spécifié est introuvable.
    ]

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    J'ai reproduit le problème

    En ce moment la requête :
    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
    SELECT idTest15,test15Array,test15Long,test15Int 
    FROM test15_master  
    INNER JOIN 
    (
      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int 
      FROM 
      ( 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
        UNION 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
      )  
      GROUP BY test15Array, test15Long
    )  
    USING ( test15Array,test15Long,test15Int)
    Donne ce résultat :
    IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
    -------- ----------- ---------- ---------
    4 user2 100 2
    2 user1 100 2
    Alors que ce devrait être :
    IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
    -------- ----------- ---------- ---------
    1 user1 10 1
    4 user2 100 2
    2 user1 100 2
    3 user2 50 1
    Que dois-je faire ?

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Après création des tables j'ai le résultat OK. Bon maintenait quelle manipulation dois-je faire pour passer à l'étape KO ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Après création des tables j'ai le résultat OK. Bon maintenait quelle manipulation dois-je faire pour passer à l'étape KO ?
    Merci pour ton aide.

    J'ai trouvé un script pour reproduire le problème :

    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
    27
    28
    29
    30
    31
    32
    33
    DROP TABLE Test_Test_Test_1.test15_master;
    CREATE TABLE Test_Test_Test_1.test15_master
    (
      idTest15 NUMBER NOT NULL
    , CONSTRAINT Test15_master_PK PRIMARY KEY
      (
        idTest15
      )
    );
    ALTER TABLE Test_Test_Test_1.test15_master ADD (test15Array VARCHAR2(10),test15Long NUMBER DEFAULT 0 NOT NULL,test15Int NUMBER DEFAULT 0 NOT NULL);
     
    INSERT INTO "TEST_TEST_TEST_1"."TEST15_MASTER" (IDTEST15, TEST15ARRAY, TEST15LONG, TEST15INT) VALUES ('1', 'user1', '10', '1');
    INSERT INTO "TEST_TEST_TEST_1"."TEST15_MASTER" (IDTEST15, TEST15ARRAY, TEST15LONG, TEST15INT) VALUES ('2', 'user1', '100', '2');
    INSERT INTO "TEST_TEST_TEST_1"."TEST15_MASTER" (IDTEST15, TEST15ARRAY, TEST15LONG, TEST15INT) VALUES ('3', 'user2', '50', '1');
    INSERT INTO "TEST_TEST_TEST_1"."TEST15_MASTER" (IDTEST15, TEST15ARRAY, TEST15LONG, TEST15INT) VALUES ('4', 'user2', '100', '2');
     
     
    SELECT idTest15,test15Array,test15Long,test15Int 
    FROM test15_master  
    INNER JOIN 
    (
      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int 
      FROM 
      ( 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long
        UNION 
        SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
        GROUP BY test15Array, test15Long    
      )  
      GROUP BY test15Array, test15Long
    )  
    USING ( test15Array,test15Long,test15Int);

    table TEST_TEST_TEST_1.TEST15_MASTER supprimé(e).
    table TEST_TEST_TEST_1.TEST15_MASTER créé(e).
    table TEST_TEST_TEST_1.TEST15_MASTER modifié(e).
    1 lignes inséré.
    1 lignes inséré.
    1 lignes inséré.
    1 lignes inséré.
    IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
    -------- ----------- ---------- ---------
    2 user1 100 2
    4 user2 100 2

  9. #9
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Bug Oracle
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    SQL> SELECT idTest15,test15Array,test15Long,test15Int
      2  FROM test15_master
      3  INNER JOIN
      4  (
      5    SELECT test15Array, test15Long, MAX(test15Int) AS test15Int
      6    FROM
      7    (
      8      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
      9      GROUP BY test15Array, test15Long
     10      UNION
     11      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
     12      GROUP BY test15Array, test15Long
     13    )
     14    GROUP BY test15Array, test15Long
     15  )
     16  USING ( test15Array,test15Long,test15Int);
     
      IDTEST15 TEST15ARRAY TEST15LONG  TEST15INT
    ---------- ----------- ---------- ----------
             2 user1              100          2
             4 user2              100          2
     
    SQL> 
    SQL> SELECT --+ no_query_transformation
      2         idTest15,test15Array,test15Long,test15Int
      3  FROM test15_master
      4  INNER JOIN
      5  (
      6    SELECT test15Array, test15Long, MAX(test15Int) AS test15Int
      7    FROM
      8    (
      9      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
     10      GROUP BY test15Array, test15Long
     11      UNION
     12      SELECT test15Array, test15Long, MAX(test15Int) AS test15Int FROM test15_master
     13      GROUP BY test15Array, test15Long
     14    )
     15    GROUP BY test15Array, test15Long
     16  )
     17  USING ( test15Array,test15Long,test15Int)
     18  /
     
      IDTEST15 TEST15ARRAY TEST15LONG  TEST15INT
    ---------- ----------- ---------- ----------
             1 user1               10          1
             4 user2              100          2
             2 user1              100          2
             3 user2               50          1
     
    SQL>

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Bug Oracle
    C'est moche!!!

    En tout cas, merci d'avoir fait ces tests.

    Autant cette requête ne veux rien dire, mais la véritable requête (sans les simplifications pour le forum) est beaucoup plus complexe et "correct".

    Ce serait gentil si quelqu'un pouvait me donner le lien pour remonter ce bug à Oracle. ( J'ai un peu cherché, mais c'est la jungle...)
    Edit : J'ai trouvé comment faire, mais je ne peux pas puisque je n'ai pas de "Support Identifiers". Tant pis..

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

Discussions similaires

  1. Suppression d'enregistrement dans une table
    Par gunico dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 22/11/2007, 16h40
  2. Suppression de doublons dans une table partionnée
    Par ludmillaj dans le forum Oracle
    Réponses: 10
    Dernier message: 27/12/2005, 14h34
  3. Réponses: 3
    Dernier message: 01/12/2005, 10h17
  4. Réponses: 3
    Dernier message: 07/11/2005, 14h49
  5. Showmodal puis rafraichissement d'une table
    Par navis84 dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/03/2005, 08h09

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