Bonjour,
J'attaque une base de données sur AS400 depuis une machine Windows avec un script vbs qui utilise le driver IBMDASQL. J'ai une énorme requête SQL qui plante dans certain cas en fonction du where. Je reçois le message suivant. Savez-vous de quoi il s'agit ?
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 IBMDA400 Command: SQL0901 : Erreur syst}me SQL. Cause . . . . . : Une erreur syst}me SQL est intervenue. L'instruction SQL en cours ne peut s'ex{cuter avec succ}s. Cette erreur n'empêchera pas cependant l 'ex{cution des instructions suivantes. Il se peut que des messages pr{c{dents ai ent signal{ un incident li{ @ cette instruction SQL et que SQL n'ait pas correct ement diagnostiqu{ l'erreur. Les messages pr{c{dents indiquent peut-être qu'un i ncident s'est produit sur cette instruction SQL, mais que le diagnostic n'a pas {t{ correctement effectu{ par SQL. L'ID message pr{c{dent est CPF9999. Une erreu r interne de type 1207 s'est produite. S'il s'agit d'une pr{compilation, le trai tement s'interrompra sur cette instruction. Que faire . . . : Consultez les me ssages pr{c{dents pour d{terminer si un incident s'est produit sur cette instruc tion SQL. Pour consulter les messages, utilisez la commande DSPJOBLOG en mode in teractif, ou la commande WRKJOB pour visualiser la sortie d'une pr{compilation. Un programme d'application recevant ce code retour peut tenter de lancer de nou velles instructions SQL. Corrigez les erreurs {ventuelles et renouvelez votre de mande.
Je ne vous copie/colle pas la requete sql car ça n'apportera rien au débat. Depuis quelque mois que je travaille avec ce driver, j'ai pu observer qu'il n'était pas très aidant au niveau message. Il est particulièrement capricieux par rapport au processus cwbundbs.exe (qui exploite le driver jdbc) qui laisse passer bcp de requêtes que IBMDASQL fait planter....
Ainsi, j'ai constaté que IBMDASQL :
1] il faut toujours faire un espace à gauche et à droit des caractère "(", ")", "," sinon plantage de la requete.
2] Microsoft Cursor Engine: Data provider or other service returned an E_FAIL status.
> problème : float ou autre type DB2 non reconnu par le dataset MS.
> solution : faire un CAST( colonne AS NUMERIC(8,5)) ou CAST( colonne AS VARCHAR(25)) qui sont des types reconnus par le dataset MS.
3] Microsoft Cursor Engine: Non-nullable column cannot be updated to Null.
> problème : usage d'un COALESCE(colonne,0) au lieu d'un COALESCE(colonne,'') ou inversement; ou usage d'un COALESCE sur un résultat d'un calcul.
> solution : mettre une valeur par défaut numérique pour du numérique et char pour du char.
Je pense que mon erreur du jour est du même ordre et je fais donc appel à vos expériences...
Je vous remercie,
nico
Partager