RPG (3 et 4, free), CL, SQL, etc...
N1kos
Messages : 34 Enregistré le : ven. 08 févr. 2013, 09:41:45
Message
par N1kos » ven. 29 nov. 2013, 17:00:15
Bonjour,
Je souhaite récupérer pour une valeur alpha une valeur numérique:
A => 10
B => 11
C => 12
ETC ...
Une solution simple est d'utiliser la table ASCII, ainsi la requête suivante me permet d'obtenir les valeurs directement:
Code : Tout sélectionner
values CHAR(ASCII(UPPER('A')) - 55) ;
Le problème étant que si le résultat de la requête est bien "10" sur mon requêteur de mon System I Navigator il est de "138" dans un programme ou dans mon strsql 5250.
En effet le code retourné n'est pas le ASCII mais le EBCDIC.
http://www.xdocs400.com/spip.php?article180
Mon problème est que la table correspondance EBCDIC n'est pas utilisable aussi facilement car de A à Z il ne s'agit pas d'une suite.
Je souhaiterais savoir si il est possible de forcer la récupération du ASCII et non EBCDIC dans la requête SQL de mon programme?
Merci d'avance
N1kos
cmasse
Site Admin
Messages : 813 Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :
Message
par cmasse » lun. 02 déc. 2013, 08:28:18
Je suis très surpris de ce que vous racontez la documentation dit :
The first character of the string will be converted to ASCII CCSID 367 for processing by the function.
Examples
Return the integer value for the ASCII representation of 'A'.
SELECT ASCII('A')
FROM SYSIBM.SYSDUMMY1
Returns the value 65.
De fait sur ma machine en V7, le code suivant
Retourne 65 dans une session 5250 (STRSQL)
Christian Massé (Volubis.fr)
N1kos
Messages : 34 Enregistré le : ven. 08 févr. 2013, 09:41:45
Message
par N1kos » lun. 02 déc. 2013, 08:53:23
Je suis également surpris, j'ai fait à l'instant un nouveau test.
retourne:
Code : Tout sélectionner
....+....1....
ASCII ( 'A' )
193
******** Fin de données ********
Je pense faire appel au point service IBM.
Merci de votre retour.
N1kos
cmasse
Site Admin
Messages : 813 Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :
Message
par cmasse » lun. 02 déc. 2013, 08:58:50
Ne seriez vous pas en CCSID 65535, ce qui empêcherait toute forme de conversion ?
si oui, essayez CHGJOB CCSID(297) avant le STRSQL
Christian Massé (Volubis.fr)
N1kos
Messages : 34 Enregistré le : ven. 08 févr. 2013, 09:41:45
Message
par N1kos » lun. 02 déc. 2013, 09:14:49
En effet,
C'est bien ça.
Toutefois dans mon code ILE/RPG IV que dois je faire afin d'obtenir le bon résultats, un QCMDEXE de cette même commande suffira ou existe t-il une autre solution?
Merci de votre aide.
N1kos
cmasse
Site Admin
Messages : 813 Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :
Message
par cmasse » lun. 02 déc. 2013, 10:22:11
OUi, la commande CHGJOB modifiant le JOB jusqu'à avis contraire, l'utilisation de QCMDEXC va modfier le CCSID.
A voir s'il faut le remettre à 65535 en fin de pgm pour nez pas avoir d'impact sur les traitements à suivre...
Christian Massé (Volubis.fr)
N1kos
Messages : 34 Enregistré le : ven. 08 févr. 2013, 09:41:45
Message
par N1kos » lun. 02 déc. 2013, 10:57:53
Merci beaucoup pour votre retour.
En effet je pense restaurer le CCSID à la valeur initial après la requête.
N1kos