Question

Je commence à en apprendre davantage sur COBOL. J'ai des programmes d'écriture d'expérience qui traitent des bases de données SQL et je suppose que je suis confus comment les magasins COBOL et récupère les données qui sont stockées dans un ordinateur central par exemple. Je sais que ce n'est pas comme les bases de données relationnelles, mais chaque programme d'exemple, j'ai vu utilise les données directement à partir de la ligne de commande et je sais que ce n'est pas la façon dont les programmes réels COBOL monde traitent les données. Quelqu'un peut-il expliquer ou me montrer une bonne ressource qui peut l'expliquer?

Était-ce utile?

La solution

COBOL est juste un autre troisième langage informatique de génération. Il est juste un peu plus que la plupart qui ne veut pas dire qu'il est en quelque sorte incomplet (en fait il est livré avec un peu de bagages - mais qui est une autre histoire).

Comme toute autre langue de troisième génération, COBOL manipule des fichiers de données dans à peu près de la même façon que vous le feriez dans un programme C. Rien étrange, mystérieux ou magique. Les fichiers sont ouverts, lu, écrit et fermé en utilisant le fichier E / S caractéristiques de la langue.

Divers mécanismes sont utilisés pour former un lien entre un fichier réel et le programme. Les détails ici sont souvent spécifiques au système d'exploitation que vous travaillez sous. En général, les mises en œuvre COBOL tentent de s'isoler de l'environnement d'exploitation via un nom de fichier logique par opposition à un nom réel. Cette indirection ajouté est important lorsque vous écrivez des programmes qui seront portés à différentes plates-formes (par exemple écrire et tester dans un IDE sur une plate-forme Windows, puis exécutez sur un ordinateur central).

Les exemples suivants se rapportent à un environnement Mainframe IBM.

Dans le monde du mainframe IBM, vous trouverez que les programmes fonctionnent comme des lots ou en ligne (par exemple SCIC). Je ne vais pas décrire comment mettre en place pour le fichier E / S sous CICS (qui est une longue histoire). Les programmes qui sont utilisés pour manipuler des fichiers sont généralement lot. Voici une illustration approximative de la façon dont un programme de traitement par lots fonctionne:

  1. programmes de traitement par lots sont exécutés par JCL. JCL est utilisé pour identifier le programme à exécuter (déclaration EXEC) et d'identifier les fichiers de votre programme fera référence à l'aide d'instructions « DD ». La fonction d'un énoncé de DD est de former une connexion logique entre un fichier réel et un nom de votre programme COBOL fera référence quand il veut se référer au fichier (ce qui est le mécanisme d'isolement mentionné plus haut). Par exemple,

    JCLDDNAM DD DSN='HLQ.MY.FILE'...
    

    associerait le nom « DD » « JCLDDNAM » dans le fichier nommé « HLQ.MY.FILE ». Cette partie est dépendant de la plateforme de sorte que les détails sont spécifiques à l'environnement d'exploitation.

  2. Dans la section « FILE-CONTROL » de votre programme COBOL, vous connectez le « DD NOM » défini dans votre JCL avec le nom que vous utiliserez sur chaque instruction E / S pour faire référence à ce fichier. Cette connexion est définie avec l'instruction « SELECT ».
    Par exemple,

    SELECT MYFILE
    ASSIGN JCLDDNAM
    remainder of select
    

    fait un lien entre tout fichier associé à « JCLDDNAM » dans votre « JCL » à « MYFILE » que vous référencera plus tard dans COBOL déclarations d'E / S. La déclaration de SELECT lui-même fait partie de la norme ISO COBOL. Cependant, de nombreuses implémentations de COBOL définissent des extentions non standard pour faciliter diverses bizarreries à leurs sous-systèmes de fichiers.

  3. Ouvrir, lire, écrire, fermer des fichiers au sein de la « procédure DIVISION » vous programme en utilisant le nom de « MYFILE » comme dans:

    OPEN MYFILE  
    READ MYFILE  
    CLOSE MYFILE  
    

Le ci-dessus est très simplifiée, et il y a une multitude de façons de le faire au sein COBOL. Comprendre l'image complète prendra un certain effort réel, le temps et la pratique. Les états E / S illustrés ci-dessus font partie de la norme COBOL, mais tous les fournisseurs auront leurs propres extentions.

IBM COBOL prend en charge un large éventail d'organisations de fichiers et les méthodes d'accès. Vous pouvez consulter le manuel IBM Enterprise COBOL Langue Référence ici pour obtenir la syntaxe et les règles de manipulation de fichiers, Cependant, Guide de l'utilisateur fournit beaucoup de bons exemples pour la lecture / écriture de fichiers (vous devrez creuser un peu, mais il est tout disposé pour vous).

La configuration de référence à une base de données SQL via un programme COBOL est un peu différent, mais implique la mise en place d'une connexion entre votre programme et le sous-système de base de données. Au sein du monde IBM c'est dun throug JCL, d'autres environnements utiliseront des mécanismes différents.

IBM COBOL utilise un pré-processeur ou co-processeur pour intégrer l'accès de base de données et l'échange de données. Par exemple, le code suivant récupérer des données à partir d'une base de données DB2:

MOVE 1234 TO PERSON-ID
EXEC SQL
  SELECT  FIRST_NAME,  LAST_NAME
  INTO   :FIRST-NAME, :LAST-NAME
  FROM PERSON
  WHERE PERSON_ID = :PERSON-ID
END-EXEC
DISPLAY PERSON-ID FIRST-NAME LAST-NAME

Les choses entre EXEC SQL et END-EXEC est une instruction select SQL assez simple. Les noms précédés par des virgules sont des variables hôtes COBOL utilisées pour transmettre des données à DB2 ou le recevoir de nouveau. Si vous avez déjà des routines d'accès de base de données codées avant cela devrait être très familier. Cette fournit une introduction simple à intégrer des instructions SQL dans un programme IBM Enterpirse COBOL.

Par ailleurs, IBM Enterprise COBOL est capable de travailler avec des documents XML aussi. Désolé pour la forte inclinaison IBM, mais qui est l'environnement dans lequel je suis plus familier.

Espérons que cela vous permet de démarrer dans la bonne direction.

Autres conseils

Qui a dit que vous ne pouvez pas utiliser SQL pour récupérer des données à partir d'une application COBOL, peut-être sans dépenser de l'argent?

Une entreprise que je travaillais pour, a fait exactement cela - avec SQLite. Ce petit bijou d'une bibliothèque de domaine public compile des instructions SQL à bytecode, il les exécute.

En remplaçant le niveau de SQLite « back-end » avec une interface personnalisée à la bibliothèque C qui traite des fichiers Cobol, il est possible d'interroger les données Cobol d'autres langues, Python dans ce cas. Il a travaillé - dans les limites de SQLite bien sûr, mais il est stable, il semblait assez relationnel et il n'a même pas besoin d'un serveur DB: -)

environnements batch traditionnel COBOL utilisent une « section de données » du programme COBOL pour déclarer directement les connexions de bases de données, qui sont à leur tour mis en place dans JCL. Depuis COBOL SQL est antérieure, les aurait tendance à être d'autres types de bases de données, mais il est probable que IBM a fait un travail SQL avec DB / 2. Je suppose que vous aurez une autre réponse de quelqu'un plus proche de ce genre de choses. Si vous regardez les préprocesseur SQL disponibles pour une utilisation avec d'autres langues que vous aurez l'idée -. Un curseur devient un type natif et fournit des résultats de la requête aux variables natives

Mainframe COBOL utilise Embedded SQL (un peu comme SQLj), par exemple:.

Division procédure.

   Exec SQL
        Select col1, col2
          from myTable
        into :ws-col1, :ws-col2
        where col0 = :col0
   End-Exec

Dans ce cas, les variables hôtes ws-COL0, ws-col1 et ws-col2 sont définis dans la section de stockage de travail. L'interface de base de données gère obtenir ces données au bon endroit.

Très facile par rapport à la substance distribuée en fait.

Tous de la boutique mainframe IBM J'ai travaillé dans ont utilisé COBOL qui a parlé avec une base de données relationnelle. En général, qui a été IBM DB2. S'il vous plaît noter que DB2 est une base de données relationnelle qui fonctionne sur les ordinateurs centraux de. Il peut également être exécuté sous Windows ou Linux.

Il y a vingt ans une façon prédominante pour entrer des données dans la base de données de l'ordinateur central DB2 était d'utiliser CICS. CICS est un logiciel « niveau de présentation » qui comminicates avec des écrans de saisie de données à base de caractères. Considérez CICS la equivelant fonctionnelle de PHP ou ASP.NET.

Aujourd'hui, il y a beaucoup plus d'options pour obtenir des données dans DB2. SCIC est toujours une option, mais votre "couche de présentation" pourrait être PHP, ASP.NET, Forms Win, Java JSF, Powerbuilder. L'essentiel est que votre plate-forme de développement devrait être en mesure de travailler avec un pilote de base de données DB2. La plate-forme pourrait être Windows, Linux, et peut-être d'autres.

Mon point est que les données peuvent entrer dans la base de données DB2 mainframe dans une de nombreuses façons de nombreuses plates-formes. Le langage COBOL pourrait être impliqué dans la saisie des données, rapports, modification COBOL de données, etc. Mais il ne peut faire partie d'une application de multiples niveaux qui pourraient faire partie de Windows, Web et mainframe. Je pourrais donner des exemples précis si vous avez plus d'informations sur l'application que vous allez travailler avec votre stage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top