Bonjour,
Me voilà confronté à un bug étrange, et que je n'arrive pas à isoler ni contourner.
Nous avons une table dans laquelle certains champs, pour des raisons d'échanges avec notre site web, sont codés en UTF-8 (CCSID 1208).
Nous ne rencontrons aucun souci au quotidien, sauf avec une requête SQL qui m'arrache les cheveux (ou ce qu'il en reste).
Lorsque nous effectuons une recherche utilisant "Like" et que celle-ci concerne un champ en UTF-8, nous obtenons dans certains cas une erreur SQL0802, avec une erreur de type 7 (division par 0)
Bien entendu, nous n'avons pas de champ numérique, et aucune division dans la requête.
La requête SQL est un peu lourde, donc je la simplifie (elle bugue même simplifiée comme çà) :
C'est le champ desArtDoc qui pose souci. Défini CHAR(80) CCSID(1208), il est parfois vide (mais non null).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 With TblOut as ( Select AGREFE as refArt, AGDESI as desArt, AWDESIGN as desArtDoc From BiblioGrp.ARTIGR Inner join BiblioSoc.ARTICL on ARREFE = AGREFE Inner join BiblioGrp.ARTWEB on AWSOCCOD = 'O' and AWREFINT = AGREFE ) Select * From TblOut Where (RefArt Like '%RADIO%' or upper(DesArt) Like '%RADIO%' or upper(DesArtDoc) Like '%RADIO%') and (RefArt Like '%SANS%' or upper(DesArt) Like '%SANS%' or upper(DesArtDoc) Like '%SANS%' ) Order by RefArt
Quelqu'un a t-il déjà rencontré un cas identique ou proche ? Et si oui, une solution a t'elle été trouvée ?
Je précise de suite, nous n'avons plus de maintenance logicielle, car nous avions prévu un remplacement de la machine au cours du premier semestre. Mais la crise du covid a tout changé, la prochaine machine n'est pas pour demain, et on économise sur tout ce qu'on peut. De toute manière si c'est bel et bien un bug au niveau d'IBM, avant qu'ils ne le fixent et qu'un correctif soit disponible, de l'eau aura coulé.
Edit : Histoire de rajouter dans le bizarre, si je modifie la requête, en retirant un test, par exemple sur DesArt, ou si j'en rajoute un, le plantage ne se fait pas sur le même enregistrement. Un enregistrement parfaitement valide à la requête précédente, devient invalide. C'est à se taper la tête contre les murs.
Partager