Pergunta

Estou começando a aprender sobre COBOL. Eu tenho alguns programas de experiência de escrita que lidar com bancos de dados SQL e eu acho que estou confuso como lojas COBOL e recupera os dados que são armazenados em um mainframe, por exemplo. Eu sei que não é como bancos de dados relacionais, mas cada programa de exemplo que eu vi toma dados diretamente na linha de comando e eu sei que não é como no mundo real programas COBOL processar os dados. Alguém pode explicar ou me mostrar um bom recurso que pode explicar isso?

Foi útil?

Solução

COBOL é apenas mais uma terceira linguagem de computador geração. É apenas um pouco mais velho do que a maioria que não significa que ele é de alguma forma incompleta (na verdade, ele vem com um pouco de bagagem - mas isso é outra história).

Como com qualquer outra linguagem de terceira geração, manipula COBOL arquivos de dados em praticamente da mesma forma que você faria em um programa C. Nada estranho, misterioso ou mágico sobre ele. Arquivos são abertos, ler, escrita e fechada usando o arquivo I O características / da língua.

Vários mecanismos são usados ??para formar uma ligação entre um arquivo real e o programa. Os detalhes aqui são muitas vezes específicos para o sistema operacional que você está trabalhando sob. Geralmente, as implementações COBOL tentar isolar-se do ambiente operacional através de um nome de arquivo lógico ao invés de um nome real. Este engano adicionado é importante quando você está escrevendo programas que serão portados para diferentes plataformas (por exemplo, escrever e teste dentro de um IDE em uma plataforma Windows, e depois executados em um mainframe).

Os seguintes exemplos referem-se a um ambiente de mainframe IBM.

Dentro do mundo do mainframe IBM, você vai achar que os programas são executados como lote ou on-line (por exemplo, CICS). Não vou descrever como configurar para o arquivo I / O no CICS (isso é uma longa história). Programas que são usados ??para manipular arquivos são geralmente lote. Aqui é uma ilustração aproximada de como um programa de lote funciona:

  1. programas em lote são executados através de JCL. JCL é usado para identificar o programa seja executado (declaração EXEC ') e identificar quais arquivos seu programa fará referência usando instruções 'DD'. A função de uma instrução DD é formar uma conexão lógica entre um arquivo real e um nome de seu programa COBOL fará referência quando quer consultar o arquivo (este é o mecanismo de isolamento mencionado anteriormente). Por exemplo,

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

    iria associar o nome 'DD' 'JCLDDNAM' para o ficheiro chamado 'HLQ.MY.FILE'. Esta parte é dependente de plataforma para que os detalhes são específicos para o ambiente operacional.

  2. Na seção 'FILE-controle' de seu programa COBOL, você conectar o 'DD NAME' definido no seu JCL com o nome que você irá usar em cada declaração I / O para referência esse arquivo. Esta conexão é definido utilizando a instrução 'selecionar'.
    Por exemplo,

    SELECT MYFILE
    ASSIGN JCLDDNAM
    remainder of select
    

    faz uma ligação entre qualquer arquivo está relacionado com 'JCLDDNAM' em sua 'JCL' para 'MYFILE', que mais tarde será referência em declarações O COBOL I /. A declaração SELECT em si é parte do padrão ISO COBOL. No entanto, muitas implementações COBOL definir algumas extensões não-padrão para facilitar a várias peculiaridades de seus subsistemas de arquivo.

  3. Open, ler, escrever, fechar arquivos dentro do 'DIVISÃO PROCEDIMENTO' de você programa usando o nome 'MYFILE' como em:

    OPEN MYFILE  
    READ MYFILE  
    CLOSE MYFILE  
    

A descrição acima é altamente simplificada, e há uma infinidade de maneiras de fazer isso dentro de COBOL. Compreender o quadro completo vai demorar algum esforço real, tempo e prática. declarações S A I / ilustrado acima fazem parte do padrão COBOL, mas todos os fornecedores terão suas próprias extensões.

IBM COBOL suporta uma ampla gama de organizações de arquivo e métodos de acesso. Você pode rever o manual IBM Enterprise COBOL Language Reference aqui para obter a sintaxe e as regras para a manipulação de arquivos, no entanto, a Guia do usuário fornece um monte de bons exemplos para a leitura / escrita de arquivos (você terá que cavar um pouco, mas tudo é colocado para fora para você).

A configuração para fazer referência a um banco de dados SQL através de um programa COBOL é um pouco diferente, mas envolve a criação de uma ligação entre o programa e o subsistema de banco de dados. Dentro do mundo IBM este é dum throug JCL, outros ambientes usará mecanismos diferentes.

IBM COBOL usa um pré-processador ou co-processador para integrar o acesso de banco de dados e troca de dados. Por exemplo, o código a seguir recuperar alguns dados de um banco de dados 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

O material entre EXEC SQL e END-EXEC é um simples SQL selecione declaração bastante. Os nomes precedidos por dois pontos são variáveis ??de host COBOL usados ??para transmitir dados para o DB2 ou recebê-lo de volta. Se você já codificado rotinas de acesso de banco de dados antes que isso deve olhar muito familiar para você. Este href="http://www.mainframegurukul.com/tutorials/database/db2_tutorials/cobol-db2-sample-program.html" ligação fornece uma introdução simples de incorporar instruções SQL em um programa IBM enterpirse COBOL.

A propósito, IBM Enterprise COBOL é capaz de trabalhar com documentos XML também. Desculpe pela pesada IBM inclinação, mas isso é o ambiente que eu estou mais familiarizado.

Espero que isso faz com que você começou na direção certa.

Outras dicas

Quem disse que você não pode usar SQL para recuperar dados de um aplicativo COBOL, talvez sem gastar dinheiro?

A empresa que eu costumava trabalhar para, fez exatamente isso - com SQLite. Esta pequena jóia de uma biblioteca de domínio público compila instruções SQL para bytecode, em seguida, executa-los.

Ao substituir o nível de "backend" do SQLite com uma interface personalizada para a biblioteca C que lida com arquivos Cobol, foi possível consultar os dados Cobol de outras línguas, Python nesse caso. Funcionou - dentro dos limites do SQLite é claro, mas era estável, ele parecia bastante relacional e nem sequer necessitar de um servidor DB: -)

ambientes de lote tradicional COBOL usar uma 'seção de dados' do programa cobol para declarar diretamente conexões de banco de dados, que são por sua vez criado em JCL. Desde COBOL antecede SQL, aqueles que tendem a ser vários outros tipos de bancos de dados, mas é provável que a IBM fez um trabalho SQL com DB / 2. Eu imagino que você vai ter outra resposta de alguém mais próximo a este material. Se você olhar para as preprocessors SQL disponíveis para uso com outras línguas que você vai ficar com a ideia -. Um cursor torna-se um tipo de dados nativo e fornece resultados de consulta para variáveis ??nativas

Mainframe Cobol usa SQL embutido (um bocado como SQLj), por exemplo:.

Procedimento Divisão.

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

Neste caso, as variáveis ??de host ws-col0, ws-col1 e ws-col2 são definidos na seção de armazenamento de trabalho. A interface de banco de dados consegue obter esses dados no lugar certo.

Muito fácil em comparação com o material distribuído na verdade.

Tudo o mainframe IBM loja é que eu trabalhei em ter usado COBOL que conversou com um banco de dados relacional. Geralmente que tem sido DB2 da IBM. Por favor, note que o DB2 é um banco de dados relacional que prazo está em mainframes. Ele também pode ser executado em Windows ou Linux.

Vinte anos atrás uma forma predominante para inserir dados no banco de dados DB2 de mainframe era usar CICS. CICS é software "nível de apresentação" que comminicates com telas de entrada de dados de caracteres base. Considere CICS a equivelant funcional de PHP ou ASP.NET.

Hoje existem muitas mais opções para obter dados em DB2. CICS ainda é uma opção, mas a sua "camada de apresentação" poderia ser PHP, ASP.NET, Win Forms, Java JSF, Powerbuilder. O importante é que a sua plataforma de desenvolvimento teria de ser capaz de trabalhar com um driver de banco de dados DB2. A plataforma pode ser Windows, Linux, e possivelmente outros.

Meu ponto é que os dados podem entrar no banco de dados de mainframe DB2 em muitas maneiras de várias plataformas. A linguagem COBOL pode estar envolvido na entrada de dados, relatórios, alterando COBOL dados, etc. Mas isso só pode ser parte de um aplicativo de camada múltipla que poderia ser parte do Windows, Web e mainframe. Eu poderia dar exemplos específicos se você tem mais informações sobre o aplicativo que você estará trabalhando com, no seu estágio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top