SQL - DB2 - ASCII vs EBCDIC

RPG (3 et 4, free), CL, SQL, etc...
Répondre
N1kos
Messages : 34
Enregistré le : ven. 08 févr. 2013, 09:41:45

SQL - DB2 - ASCII vs EBCDIC

Message par N1kos »

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 :

Fonction SQL -> ASCII

Message par cmasse »

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

Code : Tout sélectionner

values ascii('A')
Retourne 65 dans une session 5250 (STRSQL)
Christian Massé (Volubis.fr)

N1kos
Messages : 34
Enregistré le : ven. 08 févr. 2013, 09:41:45

(sans texte)

Message par N1kos »

Je suis également surpris, j'ai fait à l'instant un nouveau test.

Code : Tout sélectionner

SELECT ASCII('A')    
FROM SYSIBM.SYSDUMMY1
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 :

ASCII

Message par cmasse »

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

(sans texte)

Message par N1kos »

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 :

CHGJOB via QCMDEXC

Message par cmasse »

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

(sans texte)

Message par N1kos »

Merci beaucoup pour votre retour.

En effet je pense restaurer le CCSID à la valeur initial après la requête.
N1kos

Répondre