J'étais allé cherche le cours de SheikYerbouti
http://sheikyerbouti.developpez.com/execute_immediate/
J'étais allé cherche le cours de SheikYerbouti
http://sheikyerbouti.developpez.com/execute_immediate/
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
je viens de remarquer...Envoyé par McM
SQL*Plus: Release 8.0.6.0.0 - Production on Tue Jul 24 13:55:11 2007
(c) Copyright 1999 Oracle Corporation. All rights reserved.
Connected to:
Oracle7 Server Release 7.3.4.4.0 - Production
With the distributed, replication and parallel query options
PL/SQL Release 2.3.4.4.0 - Production
J'etais certain que c'etait le 8...mouarf...je suis choqué, cela fait un an que je suis dessus et je savais pas quel version j'avais...j'ai honte
Je disais simplement que le code compilait dans ma version (8.1.7).
Donc pas à priori une erreur de syntaxe.
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix
Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010
Ok, mais t'avais pas dit que t'étais en 8.1.7
Gusrom86 : Tu vas devoir passer par le dbms_sql
Ou alors, tu crées la table et dans ta procédure, tu fais un TRUNCATE puis un INSERT.
Je réitère mon alerte : Attention si un champ est null la ligne n'est pas récupérée, même si tous les champs sont égaux.
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
je vais d'abord tester le not exists...cela me permettra d'eviter la création d'une table inutile...Envoyé par McM
Pour le null, je vais mettre des nvl un peu partout au cas ou, merci pour ton alerte
C'est un peu bourrin comme test. Oracle a prévu le MINUS pour ça.
(Mais attention, le MINUS fait un DISTINCT et un tri).
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 SELECT SERVEUR, EMETTEUR, BORDEREAU, NUMERO_DE_LIGNE, PHASE_REBUT, DATE_REBUT, HEURE_REBUT, CODE_DEFAUT, OEIL, DATE_COMMANDE, HEURE_COMMANDE, DATE_BON_A_FACTURER, HEURE_BON_A_FACTURER, DATE_ANNULATION, HEURE_ANNULATION, TYPE_ARTICLE, TYPE_FABRICATION2, STOCK_1_FAB_0, MARQUE, TEINTE, DIAMETRE, SPHERE, CYLINDRE, PS1, PS2, PS3, PS4, PS5, CODE_CLIENT, CORRESPONDANTE, SERVEUR_FORCE_PDC, DELAI_COMMANDE, DELAI_CHARTE, QUANTITE, STOCK_EN_ETAT, MANQUANT, MATIERE, TYPE_MATIERE, GENRE, TYPE_COLO, TYPE_CSV, TYPE_TSV, PHASE_00, DATE_00, HEURE_00, PHASE_SURF, DATE_SURF, HEURE_SURF, COMPTEUR_SURF, PHASE_COLO, DATE_COLO, HEURE_COLO, COMPTEUR_COLO, PHASE_SUPRA, DATE_SUPRA, HEURE_SUPRA, COMPTEUR_SUPRA, PHASE_CSV, DATE_CSV, HEURE_CSV, COMPTEUR_CSV, PHASE_TSV, DATE_TSV, HEURE_TSV, COMPTEUR_TSV, PHASE_TOPCOAT, DATE_TOPCOAT, HEURE_TOPCOAT, COMPTEUR_TOP_COAT, PHASE_70, DATE_70, HEURE_70, COMPTEUR_70, PHASE_80, DATE_80, HEURE_80, COMPTEUR_80, PHASE_FIN, DATE_FIN, HEURE_FIN, COMPTEUR FROM extfil MINUS SELECT SERVEUR, EMETTEUR, BORDEREAU, NUMERO_DE_LIGNE, PHASE_REBUT, DATE_REBUT, HEURE_REBUT, CODE_DEFAUT, OEIL, DATE_COMMANDE, HEURE_COMMANDE, DATE_BON_A_FACTURER, HEURE_BON_A_FACTURER, DATE_ANNULATION, HEURE_ANNULATION, TYPE_ARTICLE, TYPE_FABRICATION2, STOCK_1_FAB_0, MARQUE, TEINTE, DIAMETRE, SPHERE, CYLINDRE, PS1, PS2, PS3, PS4, PS5, CODE_CLIENT, CORRESPONDANTE, SERVEUR_FORCE_PDC, DELAI_COMMANDE, DELAI_CHARTE, QUANTITE, STOCK_EN_ETAT, MANQUANT, MATIERE, TYPE_MATIERE, GENRE, TYPE_COLO, TYPE_CSV, TYPE_TSV, PHASE_00, DATE_00, HEURE_00, PHASE_SURF, DATE_SURF, HEURE_SURF, COMPTEUR_SURF, PHASE_COLO, DATE_COLO, HEURE_COLO, COMPTEUR_COLO, PHASE_SUPRA, DATE_SUPRA, HEURE_SUPRA, COMPTEUR_SUPRA, PHASE_CSV, DATE_CSV, HEURE_CSV, COMPTEUR_CSV, PHASE_TSV, DATE_TSV, HEURE_TSV, COMPTEUR_TSV, PHASE_TOPCOAT, DATE_TOPCOAT, HEURE_TOPCOAT, COMPTEUR_TOP_COAT, PHASE_70, DATE_70, HEURE_70, COMPTEUR_70, PHASE_80, DATE_80, HEURE_80, COMPTEUR_80, PHASE_FIN, DATE_FIN, HEURE_FIN, COMPTEUR FROM extfil_hist
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
donc ca serait quelquechose du genre :
je test et je vous reponds la semaine prochaine, voir si ca marche...
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 insert into extfil_temp (SERVEUR, EMETTEUR, BORDEREAU, NUMERO_DE_LIGNE, PHASE_REBUT, DATE_REBUT, HEURE_REBUT, CODE_DEFAUT, OEIL, DATE_COMMANDE, HEURE_COMMANDE, DATE_BON_A_FACTURER, HEURE_BON_A_FACTURER, DATE_ANNULATION, HEURE_ANNULATION, TYPE_ARTICLE, TYPE_FABRICATION2, STOCK_1_FAB_0, MARQUE, TEINTE, DIAMETRE, SPHERE, CYLINDRE, PS1, PS2, PS3, PS4, PS5, CODE_CLIENT, CORRESPONDANTE, SERVEUR_FORCE_PDC, DELAI_COMMANDE, DELAI_CHARTE, QUANTITE, STOCK_EN_ETAT, MANQUANT, MATIERE, TYPE_MATIERE, GENRE, TYPE_COLO, TYPE_CSV, TYPE_TSV, PHASE_00, DATE_00, HEURE_00, PHASE_SURF, DATE_SURF, HEURE_SURF, COMPTEUR_SURF, PHASE_COLO, DATE_COLO, HEURE_COLO, COMPTEUR_COLO, PHASE_SUPRA, DATE_SUPRA, HEURE_SUPRA, COMPTEUR_SUPRA, PHASE_CSV, DATE_CSV, HEURE_CSV, COMPTEUR_CSV, PHASE_TSV, DATE_TSV, HEURE_TSV, COMPTEUR_TSV, PHASE_TOPCOAT, DATE_TOPCOAT, HEURE_TOPCOAT, COMPTEUR_TOP_COAT, PHASE_70, DATE_70, HEURE_70, COMPTEUR_70, PHASE_80, DATE_80, HEURE_80, COMPTEUR_80, PHASE_FIN, DATE_FIN, HEURE_FIN, COMPTEUR) SELECT SERVEUR, EMETTEUR, BORDEREAU, NUMERO_DE_LIGNE, PHASE_REBUT, DATE_REBUT, HEURE_REBUT, CODE_DEFAUT, OEIL, DATE_COMMANDE, HEURE_COMMANDE, DATE_BON_A_FACTURER, HEURE_BON_A_FACTURER, DATE_ANNULATION, HEURE_ANNULATION, TYPE_ARTICLE, TYPE_FABRICATION2, STOCK_1_FAB_0, MARQUE, TEINTE, DIAMETRE, SPHERE, CYLINDRE, PS1, PS2, PS3, PS4, PS5, CODE_CLIENT, CORRESPONDANTE, SERVEUR_FORCE_PDC, DELAI_COMMANDE, DELAI_CHARTE, QUANTITE, STOCK_EN_ETAT, MANQUANT, MATIERE, TYPE_MATIERE, GENRE, TYPE_COLO, TYPE_CSV, TYPE_TSV, PHASE_00, DATE_00, HEURE_00, PHASE_SURF, DATE_SURF, HEURE_SURF, COMPTEUR_SURF, PHASE_COLO, DATE_COLO, HEURE_COLO, COMPTEUR_COLO, PHASE_SUPRA, DATE_SUPRA, HEURE_SUPRA, COMPTEUR_SUPRA, PHASE_CSV, DATE_CSV, HEURE_CSV, COMPTEUR_CSV, PHASE_TSV, DATE_TSV, HEURE_TSV, COMPTEUR_TSV, PHASE_TOPCOAT, DATE_TOPCOAT, HEURE_TOPCOAT, COMPTEUR_TOP_COAT, PHASE_70, DATE_70, HEURE_70, COMPTEUR_70, PHASE_80, DATE_80, HEURE_80, COMPTEUR_80, PHASE_FIN, DATE_FIN, HEURE_FIN, COMPTEUR FROM extfil MINUS SELECT SERVEUR, EMETTEUR, BORDEREAU, NUMERO_DE_LIGNE, PHASE_REBUT, DATE_REBUT, HEURE_REBUT, CODE_DEFAUT, OEIL, DATE_COMMANDE, HEURE_COMMANDE, DATE_BON_A_FACTURER, HEURE_BON_A_FACTURER, DATE_ANNULATION, HEURE_ANNULATION, TYPE_ARTICLE, TYPE_FABRICATION2, STOCK_1_FAB_0, MARQUE, TEINTE, DIAMETRE, SPHERE, CYLINDRE, PS1, PS2, PS3, PS4, PS5, CODE_CLIENT, CORRESPONDANTE, SERVEUR_FORCE_PDC, DELAI_COMMANDE, DELAI_CHARTE, QUANTITE, STOCK_EN_ETAT, MANQUANT, MATIERE, TYPE_MATIERE, GENRE, TYPE_COLO, TYPE_CSV, TYPE_TSV, PHASE_00, DATE_00, HEURE_00, PHASE_SURF, DATE_SURF, HEURE_SURF, COMPTEUR_SURF, PHASE_COLO, DATE_COLO, HEURE_COLO, COMPTEUR_COLO, PHASE_SUPRA, DATE_SUPRA, HEURE_SUPRA, COMPTEUR_SUPRA, PHASE_CSV, DATE_CSV, HEURE_CSV, COMPTEUR_CSV, PHASE_TSV, DATE_TSV, HEURE_TSV, COMPTEUR_TSV, PHASE_TOPCOAT, DATE_TOPCOAT, HEURE_TOPCOAT, COMPTEUR_TOP_COAT, PHASE_70, DATE_70, HEURE_70, COMPTEUR_70, PHASE_80, DATE_80, HEURE_80, COMPTEUR_80, PHASE_FIN, DATE_FIN, HEURE_FIN, COMPTEUR FROM extfil_hist;
cette méthode ne fonctionne pas! (la aussi il ne tient pas compte du null dans certains champs ? )
a votre avis, quel méthode serait la meilleure pour virer des doublons parfaits ?
Désolé, je ne te crois pas : Qu'est ce qui ne marche pas ?
Donne un exemple.
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
eh bien disons que si j'avais rien a la base dans extfil_hist, cela passe.
Mais le lendemain, quand j'ai des données dans la table historique (extfil_hist), eh bien malgres le minus cela ne passe pas...enfin, des doublons viennent tout de même!
Poste un exemple concret de doublon sur tes 2 tables qui ressortirait par la requête.
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
je tente un dernier truc, j'aurai le resultat que demain...Envoyé par McM
Si ca marche tjrs pas, je mettrai le resultat d'une requete...
bon voila un exemple sur lequel j'ai des doublons :
et j'ai eu 15000 doublons en une journée (j'insere a peu pres 60.000 données/jours).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SERVEUR EMETTEUR BORDEREAU NUMERO_DE_LIGNE PHASE_REBUT DATE_REBUT HEURE_REBUT CODE_DEFAUT OEIL DATE_COMMANDE HEURE_COMMANDE DATE_BON_A_FACTURER HEURE_BON_A_FACTURER DATE_ANNULATION HEURE_ANNULATION TYPE_ARTICLE TYPE_FABRICATION2 STOCK_1_FAB_0 MARQUE TEINTE DIAMETRE SPHERE CYLINDRE PS1 PS2 PS3 PS4 PS5 CODE_CLIENT CORRESPONDANTE SERVEUR_FORCE_PDC DELAI_COMMANDE DELAI_CHARTE QUANTITE STOCK_EN_ETAT MANQUANT MATIERE TYPE_MATIERE GENRE TYPE_COLO TYPE_CSV TYPE_TSV PHASE_00 DATE_00 HEURE_00 PHASE_SURF DATE_SURF HEURE_SURF COMPTEUR_SURF PHASE_COLO DATE_COLO HEURE_COLO COMPTEUR_COLO PHASE_SUPRA DATE_SUPRA HEURE_SUPRA COMPTEUR_SUPRA PHASE_CSV DATE_CSV HEURE_CSV COMPTEUR_CSV PHASE_TSV DATE_TSV HEURE_TSV COMPTEUR_TSV PHASE_TOPCOAT DATE_TOPCOAT HEURE_TOPCOAT COMPTEUR_TOP_COAT PHASE_70 DATE_70 HEURE_70 COMPTEUR_70 PHASE_80 DATE_80 HEURE_80 COMPTEUR_80 PHASE_FIN DATE_FIN HEURE_FIN COMPTEUR COUNT(*) 22 15 2600002 001 -- 500101 000000 1 070706 1506 000000 0000 000000 0000 6 23 2 109 438 60 -1400 +000 103 510 000 000 000 9212380 95G 000000 000000 1 0 0 1.7 MIN UNIF SD 00 070706 1807 10 070710 0750 4 000000 0000 0 000000 0000 0 000000 0000 0 50 070720 1629 1 60 070727 1141 1 000000 0000 0 000000 0000 0 90 000000 0000 0 2 22 15 2600002 001 10 070717 105322 281 1 070706 1506 000000 0000 000000 0000 6 23 2 109 438 60 -1400 +000 103 510 000 000 000 9212380 95G 000000 000000 1 0 0 1.7 MIN UNIF SD 00 070706 1807 10 070717 1053 0 000000 0000 0 000000 0000 0 000000 0000 0 50 000000 0000 0 60 000000 0000 0 000000 0000 0 000000 0000 0 90 000000 0000 0 2 22 15 2600002 001 10 070718 112232 111 1 070706 1506 000000 0000 000000 0000 6 23 2 109 438 60 -1400 +000 103 510 000 000 000 9212380 95G 000000 000000 1 0 0 1.7 MIN UNIF SD 00 070706 1807 10 070718 1122 0 000000 0000 0 000000 0000 0 000000 0000 0 50 000000 0000 0 60 000000 0000 0 000000 0000 0 000000 0000 0 90 000000 0000 0 2 22 15 2600002 001 10 070719 111843 311 1 070706 1506 000000 0000 000000 0000 6 23 2 109 438 60 -1400 +000 103 510 000 000 000 9212380 95G 000000 000000 1 0 0 1.7 MIN UNIF SD 00 070706 1807 10 070719 1118 0 000000 0000 0 000000 0000 0 000000 0000 0 50 000000 0000 0 60 000000 0000 0 000000 0000 0 000000 0000 0 90 000000 0000 0 2 22 15 2600002 002 -- 500101 000000 2 070706 1506 000000 0000 000000 0000 6 23 2 109 438 60 -1400 +100 103 510 000 000 000 9212380 95G 000000 000000 1 0 0 1.7 MIN UNIF SD 00 070706 1807 10 070710 0750 4 000000 0000 0 000000 0000 0 000000 0000 0 50 070720 1629 1 60 070727 1141 1 000000 0000 0 000000 0000 0 90 000000 0000 0 2 22 15 2611579 001 -- 500101 000000 1 070710 1028 000000 0000 000000 0000 1 21 2 118 100 65 -2400 +000 000 000 000 000 000 9418967 94H 070717 000000 1 0 1 1.8 MIN UNIF SD 00 070710 1055 10 070710 1503 2 000000 0000 0 000000 0000 0 000000 0000 0 50 070711 1558 2 000000 0000 0 000000 0000 0 000000 0000 0 90 000000 0000 0 2 22 15 2611579 001 50 070717 192606 932 1 070710 1028 000000 0000 000000 0000 1 21 2 118 100 65 -2400 +000 000 000 000 000 000 9418967 94H 070717 000000 1 0 1 1.8 MIN UNIF SD 00 070710 1055 10 070717 1926 0 000000 0000 0 000000 0000 0 000000 0000 0 50 070717 1926 0 000000 0000 0 000000 0000 0 000000 0000 0 90 000000 0000 0 2 22 15 2611579 001 50 070718 193225 932 1 070710 1028 000000 0000 000000 0000 1 21 2 118 100 65 -2400 +000 000 000 000 000 000 9418967 94H 070717 000000 1 0 1 1.8 MIN UNIF SD 00 070710 1055 10 070718 1932 0 000000 0000 0 000000 0000 0 000000 0000 0 50 070718 1932 0 000000 0000 0 000000 0000 0 000000 0000 0 90 000000 0000 0 2 22 15 2611579 001 50 070719 122229 115 1 070710 1028 000000 0000 000000 0000 1 21 2 118 100 65 -2400 +000 000 000 000 000 000 9418967 94H 070717 000000 1 0 1 1.8 MIN UNIF SD 00 070710 1055 10 070719 1222 0 000000 0000 0 000000 0000 0 000000 0000 0 50 070719 1222 0 000000 0000 0 000000 0000 0 000000 0000 0 90 000000 0000 0 2 22 15 2611579 001 50 070724 193406 932 1 070710 1028 000000 0000 000000 0000 1 21 2 118 100 65 -2400 +000 000 000 000 000 000 9418967 94H 070717 000000 1 0 1 1.8 MIN UNIF SD 00 070710 1055 10 070724 1934 0 000000 0000 0 000000 0000 0 000000 0000 0 50 070724 1934 0 000000 0000 0 000000 0000 0 000000 0000 0 90 000000 0000 0 2
edit : tout ne passe pas pour l'exemple, bon le count(*) est à 2...donc 2 fois la meme ligne...
Sur quelle table tu lances ce select ?
Tu insères bien dans la table extfil_hist et non pas extfil_temp ?
Est-tu sur de ne pas déjà avoir de doublons avant de lancer cette insertion ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 insert into extfil_temp select * FROM extfil MINUS select * FROM extfil_hist
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
Oui c'est bien cette requête la que j'ai lancé, et oui je suis sure que je n'avais pas deja de doublons...
Commence a me gaver, ca fait bien un mois que je me traine ce probleme...
et ce select je l'ai lancé sur extfil_hist, puisqqu'apres le minus, j'insere le extfil_temp dans le extfil_hist...
Je mets des * pour pas mettre les 81 colonnes
Si tu lances ces 2 requetes, la dernière ne doit ramener aucune ligne :
C'est impossible d'avoir des doublons avec ces expressions. Le problème vient d'ailleurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 insert into extfil_temp select * FROM extfil MINUS select * FROM extfil_hist select * from extfil_temp intersect select * FROM extfil_hist => doit générer l'exception NO_DATA_FOUND
Alors soit quelque chose d'autre insère / modifie dans extfil_hist
Soit un trigger sur extfil_hist modifie une donnée.
PS : tu purges bien extfil_temp avant d'insérer dedans ?
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
je vais tester pour le no data found...
Oui moi aussi je mettais les 81 colonnes, sinon je crois qu'il me fait un erreur...
Et comme c'est moi qui ait créé la base, je peux affirmer qu'il n'y a aucun trigger et qu'il n'y a pas plus de manipulation sur extfil_hist que celle que j'ai indiquée.
bon j'ai tout vidé, tous mes historiques et toute mes tables, et j'ai refait la manip...
j'ai fais la requete -> no rows selected
ce qui est logique.
Je vais voir demain comment ca se passe (encore), et je refais un rapport...
je m'en sors plus la...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select * from extfil_temp intersect select * FROM extfil_hist => 15525 rows selected 8O
Tu peux me redire si c'est exactement ce que tu as fait ?
hier
Aujourd'hui
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 truncate table extfil_temp truncate table extfil_hist insert into extfil_temp select * FROM extfil MINUS select * FROM extfil_hist select * from extfil_temp intersect select * FROM extfil_hist => 0 insert into extfil_hist select * FROM extfil_temp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 truncate table extfil_temp insert into extfil_temp select * FROM extfil MINUS select * FROM extfil_hist select * from extfil_temp intersect select * FROM extfil_hist => 15525
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager