You are here:

Ingres/select union dans procedure stockee

Advertisement


Question
botoujours en voulant écrire des procédures stockées dans une base ingres, j'ai des soucis pour écrire un 'select union)
la compil passe, l'éxécution ne plante pas, mais cela ne renvoie pas les valeurs souhaitées

mon select :
            select col1,
                   col2,
                   col3,
                   col4
            into :wcol1,
                 :wcol2
                 :wcol3,
                 :wcol4
            from table 1
            where col3='toto'
   union
            select col1,
                   col2
                   col3,
                   col4
            from table2
            where col3='toto'
     
je dois trouver une ou plusieurs lignes soit dans la table1 soit dans la table2 (pas dans les 2 en même temps)

quand je récupère mes données :
        - si la ligne est dans table1 ==> ok j'ai les bonnes valeurs dans wcol1,wcol2,wcol3,wcol4
        - si la ligne est dans table2 ==> j'ai les valeurs ok dans wcol1 et wcol2, mais rien dans wcol3,wcol4

si j'inverse le select (si je mets table2 en premier select et table1 en deuxième select) et que la ligne à trouver est dans table2, j'ai les bonnes valeurs !

je ne sais pas comment écrire ce select.

je ne peux pas mettre de INTO aprés le 2ème select (çà plante à la compil)

comment faire ??

merci de votre aide  

Answer
re bonjour,

Je vous passe les excuses sur la lenteur de ma réponse, je les ai déjà présentées il y a peu.

Le résultat d'un SELECT doit être le même, en théorie (si les données sont identiques), le même quelque soit le contexte (isql, db proc, ABF, embeded C, etc). Encore une fois cela s'entend sur un jeu de données identique (par exemple le même ordre SQL passé sur la même base, dont les données n'ont pas bougé entre temps).

Dans votre cas, le SELECT devrait retourner le même résultat sous isql et dans une DB Proc, quel que soit le sens d'écriture de la requête (contrairement à d'autres SGBD la manière dont on rédige la requête n'impacte en théorie ni l'exécution ni les performances). SI ce n'est pas le cas, il s'agit peut-être d'un bug Ingres (cela arrive).

Si votre client/employeur dispose d'un contrat de support auprès de l'éditeur il faut ouvrir un appel, puis espérer un patch pour la résolution.

Dans le cas contraire, il y a des choses à faire pour tenter de s'en sortir tout seul hors l'appel au support :
1/ confirmer que la même requête exactement se comporte différemment entre la DB proc et isql
2/ tentez de trouver l'écriture qui vous convient (et le résultat qui va avec) et faites en une vue de votre SELECT ... UNION (CREATE VIEW toto AS SELECT ... UNION) et retestez votre procédure en utilisant la vue plutôt que le SELECT ... UNION directement dans la DB proc.
3/ mais la solution n'est pas jolie du tout : passez par une table temporaire (DECLARE GLOBAL TEMPORARY TABLE) pour remplacer votre SELECT ... UNION

Sinon il y a une dernière chose qui me vient à l'esprit : par défaut le UNION élimine les doublons. Ce sont peut être des enregistrements en double que vous cherchez aujourd'hui. Dans ce cas il y a le mot clé ALL à ajouter à la suite UNION pour indiquer à Ingres de ne pas éliminer ces doublons.

Encore une fois n'hésitez pas à revenir vers moi en cas de besoin, etc etc ;-)

Cordialement,
Jean-Pierre ZUATE
http://lafageconseil.fr

Ingres

All Answers


Answers by Expert:


Ask Experts

Volunteer


Jean-Pierre Zuate

Expertise

Any questions about database Ingres (owned by Computer Associates then Ingres Corp) : - Ingres 6.4 - OpenINGRES from 1.0 to 2.0 - IngresII from 2.0 to 2.6 - Ingres R3, Ingres 2006 (Open Source version) - Ingres 9.x, Ingres 10.x - All tool around Ingres : ABF, Report Writer, Replicator, OpenROAD (3.5 to 2006), Ingres/NET Ingres/STAR, ...

Experience

16 years of computing experience as :
- AS400 programmer
- AIX / Ingres administrator and developer (OpenROAD and korn shell)
- Ingres DataBase Administrator
- Ingres expert - Data modelisation - ETL - Reporting - Many of Computer Associates sofwares - ITIL / CMDB / Change Management

Organizations
http://lafageconseil.fr

Education/Credentials
Computing bachelor (1989)

Past/Present Clients
More than 100 customers during my 6 years of CA has an Ingres consultant, all around France and Africa (Togo, Cameroon, Morrocco, ...)

©2012 About.com, a part of The New York Times Company. All rights reserved.