en cobol Microfocus (Server Express 4 ou 5) quelle est la taille maxi pour un RECORD afin de ne pas avoir le message d'erreur suivant à la compilation :
Pour ma part j'utilise souvent des structures ayant des longueurs de
6000 à 8000 charactères (Flux BDF (Banque de France). Cela ne pose aucun
problème Avec Microfocus sous Unix.
Au delà, c'est l'inconnu.
Ce qui est sûr, c'est le compilateur Microfocus, comme les autres à ses limites.
Pour connaître celles ci, voir avec Microfocus.
Cela ne fait pas partie à mon avis d'options paramétrables soit à la compilation ou à l'installation du compilateur.
BUL émet une piste intéressante dans le sens ou, si vous avez besoin de récupérez un certain nombre de données, il faudra peut être se pencher sur
la façon de procéder, afin peut être de filtrer les données et ne prendre que
ce qui vous intéresse
Affaire à suivre ...
HULK77
__________________________
Ma fabrique de chemises tourne à plein régime !!!
tout d'abord merci aux différents intervenants sur le sujet.
J'ai fini par avoir une réponse et apparemment la limite actuelle sur le site où je me trouve est de 32K.
Concernant l'objet Oracle de grande taille de type LOB, voici une définition succinte de ceux-ci :
1 - BLOB
Objets de grande taille binaires (Binary Large Objects)
Exemples: images, sons, vidéo
2 - CLOB
Objets de grande taille de type caractère (Character Large Objects)
Exemple: Textes (encodage single byte)
3 - NCLOB
Objets de grande taille avec jeux de caractères nationaux (National Character Large Objects)
Exemple: Textes nationaux (encodage multi-byte, possibilité de stocker des alphabets asiatiques)
En manipulant ces objets Oracle en cobol, on peut connaitre la taille de l'objet courant à l'aide de définition en HOST VARIABLE :
définition en WORKING STORAGE
...
EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 94X1-E9060-LONG PICTURE S9(9) COMP.
01 94X1-E9060 PICTURE X(10000000) VARYING.
EXEC SQL END DECLARE SECTION END-EXEC
...
EXEC SQL BEGIN DECLARE SECTION END-EXEC
10 B11U-J8841B PICTURE X(50).
10 B11U-E9060 SQL-CLOB.
EXEC SQL END DECLARE SECTION END-EXEC
manipulation en PROCEDURE DIVISION
EXEC SQL LOB DESCRIBE :B11U-E9060
GET LENGTH INTO :94X1-E9060-LONG
END-EXEC.
Pour manipuler ces objets il y a différents ordres SQL à faire en amont du GET LENGTH, mais je ne vais vous expliquer là le détail.
Malheureusement pour l'instant je ne connais pas la taille maximale du texte qui sera stocké dans un objet CLOB par l'application concernée.
Aussi nous souhaitions tailler large pour récupérer cette information car pour des raisons externes à l'application cette information, qui en fait une requête SQL complexe, doit être stockée sous forme fichier séquentiel afin d'être reprise par un automate qui l'exécutera ultérieurement.
Je suis donc d'accord pour dire qu'il y a moins de filtrer plutôt les informations à conserver mais la taille maxi reste variable et nous cherchons donc à obtenir le stockage le plus large.
Merçi pour ses précisions techniques, mais dans mon domaine qu'est la finance, l'on ne traite que des données de type flux bancaire et non des données imags ou vidéo comme c'est ton cas.
Vous utilisez Oracle avec des requêtes plus complexes que nous.
Je ne sais pas si l'on pourra éclairer ta lanterne.
J'en profite pour faire une remarque sur mes propos concernant le nombre de caractères maximum traiter. En effet nous traitons régulièrement des flux
de 8000 à 10 000 caractère à travers des fichiers et non pas de 6000 à 8000
caractères.
Néanmoins, la solution si vous la trouver, intéressera la communauté.
HULK77
__________________________
Ma fabrique de chemises tourne à plein régime !!!
je travaille également dans le domaine bancaire ;-)
En fait, pour des problèmes de sécurité entre serveurs, on ne peut pas interroger directement la base de données avec la requête SQL. Aussi les personnes du projet ont dû imaginer un système où il faut poster la requête SQL dans un objet CLOB. Ensuite un autre programme, en Cobol, extrait cette requête pour la poster à son tour dans un fichier séquentiel. Et enfin un "démon" balaye la pile où se situe cette requête et l'exécute... Ouf.
Aux dernières nouvelles, cette équipe a défini une autre manière (sans passer par Cobol) de poster cette requête. Pour l'instant je n'en sais pas plus, juste qu'il s'agira d'un enchaînement de scripts Unix.
une erreur de conception, à laquelle on
tente de palier, avec des solutions tellement
emberlificotées, que ça ne peut que queuter,
et qui ne font qu'aggraver le mal.
C'est une contrainte de sécurité (la protection des données dans le domaine bancaire....) qui oblige à trouver un contournement à l'accès direct aux données.
Ensuite choisir entre un programme Cobol ou bien des scripts Shell, tout dépend des ressources et des compétences humaines dont tu disposes dans tes équipes.