Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/09/2012, 18h29   #1
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
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 :
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):
Citation:
IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
-------- ----------- ---------- ---------
2 user1 100 2
4 user2 100 2

Apres avoir recréer la table (OK):
Citation:
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 :
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 :
Citation:
IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
-------- ----------- ---------- ---------
3 user2 50 1
1 user1 10 1
4 user2 100 2
2 user1 100 2

Code :
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 :
Citation:
TEST15ARRAY TEST15LONG TEST15INT
----------- ---------- ---------
user1 10 1
user2 100 2
user1 100 2
user2 50 1
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 11h50   #2
bguihal
Nouveau Membre du Club
 
Homme
Développeur informatique
Inscription : octobre 2002
Messages : 68
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2002
Messages : 68
Points : 32
Points : 32
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.
bguihal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 12h12   #3
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
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 :
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
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 14h37   #4
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 115
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 4 115
Points : 8 010
Points : 8 010
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 :
1
2
 
SELECT banner FROM v$version;
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 15h39   #5
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
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 :
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 :
1
2
 
SELECT banner FROM v$version;
Citation:
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 :
Citation:
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.
]
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 16h05   #6
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
J'ai reproduit le problème

En ce moment la requête :
Code :
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 :
Citation:
IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
-------- ----------- ---------- ---------
4 user2 100 2
2 user1 100 2
Alors que ce devrait être :
Citation:
IDTEST15 TEST15ARRAY TEST15LONG TEST15INT
-------- ----------- ---------- ---------
1 user1 10 1
4 user2 100 2
2 user1 100 2
3 user2 50 1
Que dois-je faire ?
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 16h59   #7
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 115
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 4 115
Points : 8 010
Points : 8 010
Après création des tables j'ai le résultat OK. Bon maintenait quelle manipulation dois-je faire pour passer à l'étape KO ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 17h13   #8
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
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 :
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);

Citation:
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
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2012, 17h22   #9
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 115
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 4 115
Points : 8 010
Points : 8 010
Bug Oracle
Code :
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>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 14/09/2012, 18h06   #10
Fred_34
Membre expérimenté
 
Homme Frédéric
Inscription : juin 2011
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Localisation : France

Informations forums :
Inscription : juin 2011
Messages : 442
Points : 576
Points : 576
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..
Fred_34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h11.


 
 
 
 
Partenaires

Hébergement Web