Bonjur,
je souhaite comparer en sql (oracle) le nombre d'enregistrement de deux tables. et je veux que l'ordre me ramène un résulat "ok", par exemple
@+
Bonjur,
je souhaite comparer en sql (oracle) le nombre d'enregistrement de deux tables. et je veux que l'ordre me ramène un résulat "ok", par exemple
@+
Voici un code en PLSQL , surement pas le meilleur en teme SQL, mais qui repond a ton besoin, j'ai cru coprendre que tu faus du PL .... neanmoins, garde a l'esprit que ce que tu cherches a faire
peut etre COUTEUX, je ne rentre pas dans les details de 'Tuning' mais ce genre de requete est assimilé a full table scan , ou a un "index fast full scan " si la requete a une clause "WHERE" sur une colonne indexée ... si mes souvenirs sont bon ...
Bref, peu y'avoir un probleme au niveau perf applicatif ....
Hope this help ...
haha.. j'ai oublié de poster le code ...
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 create or replace function testCount return varchar2 is lv_tabCount1 number; lv_tabCount2 number; begin select count(*) into lv_tabCount1 from emp ; select count(*) into lv_tabCount2 from emp_test ; dbms_output.put_line('lv_tabCount1 = '||lv_tabCount1); dbms_output.put_line('lv_tabCount2 = '||lv_tabCount2); if lv_tabCount1 = lv_tabCount2 then return 'OK'; else return 'Not ok'; end if; end; / show error;
autre info: quand je parle de "champ indexé" je veux dire une PK (primary key ) ... attention au champ null ...
Ah ok, je suis obligé de passer par du PL...
Mais je pensais qu'il y avait un moyen plus simple, j'ai bien essayé de passer des count dans les where, mais ça ne fonctionne pas du tout...
pour ce qui est de la perf, c'est pas grave, c'est dans le cadre d'une recette, et je suis en train de coder des requettes, qui me permettent de recetter en quasi auto... Voilà et bien je te remercie beaucoup.
Tu peux aussi faire cela :
PS : le AS Nombre ne sert à rien d'autre qu'à lever l'ambiguité (pour les êtres humains, pas pour le parser) sur le COUNT(*) qui est dans le DECODE.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT DECODE(COUNT(*), 2, 'Non', 'Oui') FROM (SELECT COUNT(*) AS Nombre FROM Table1 UNION SELECT COUNT(*) FROM Table2)
J'affirme péremptoirement que toute affirmation péremptoire est fausse
5ième élément : barde-prince des figures de style, duc de la synecdoque
Je ne réponds jamais aux questions techniques par MP
Mediat, t'es sûr que ta méthode fonctionne ?
J'aurais plutôt fait quelque chose comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select decode ((select count(*) from table1), (select count(*) from table2), 'oui', 'non') from dual;
Un problème sans solution est un problème mal posé
Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
Bonjour plaine,
les deux requêtes sont équivalentes.
En effet, si le nombre est le même dans les deux tables, le union reverra une ligne...
Tout à fait aline, c'est d'ailleurs pourquoi il ne faut surtout pas mettre UNION ALL.
J'affirme péremptoirement que toute affirmation péremptoire est fausse
5ième élément : barde-prince des figures de style, duc de la synecdoque
Je ne réponds jamais aux questions techniques par MP
Bonjour Aline et Mediat,
Merci pour ces précisions. Je dois avouer que je n'ai pas beaucoup réfléchi avant de poster.
Un problème sans solution est un problème mal posé
Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
Oui, la requête de Médiat est intéressante, je me la colle quelque part pour m'en resservir un jour.
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.
Mouais... mais ça fait du tri sur un SELECT *Envoyé par Médiat
je vous propose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select DECODE((select count(*) from table1) - (select count(*) from table2), 0, 'OK','KO') FROM dual
Ce qui revient à quelque chose près à ce que j'ai proposéEnvoyé par orafrance
Un problème sans solution est un problème mal posé
Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
Détail qui m'avait échappé
Merci de m'avoir corrigé
Un problème sans solution est un problème mal posé
Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
???Envoyé par orafrance
Le tri se fait sur le résultat des deux requêtes COUNT(*), c'est à dire sur 2 lignes, cela ne devrait pas poser de problème, je pense.
J'affirme péremptoirement que toute affirmation péremptoire est fausse
5ième élément : barde-prince des figures de style, duc de la synecdoque
Je ne réponds jamais aux questions techniques par MP
Moi ce sont les soustractions que je n'aime pasEnvoyé par orafrance
J'affirme péremptoirement que toute affirmation péremptoire est fausse
5ième élément : barde-prince des figures de style, duc de la synecdoque
Je ne réponds jamais aux questions techniques par MP
Eh bien les gars je vous mets d'accord, ma solution ne comporte ni tris inutiles, ni soustractions !
Un problème sans solution est un problème mal posé
Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
Et comment tu fais s'il y a 3 tables à comparer, ou 134752 ?Envoyé par plaineR
J'affirme péremptoirement que toute affirmation péremptoire est fausse
5ième élément : barde-prince des figures de style, duc de la synecdoque
Je ne réponds jamais aux questions techniques par MP
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