sábado, 25 de junho de 2016

SQL - Select simples

Olá!

Com o início das postagens no blog Experiência SQL, começo também as postagens de demonstração da utilização de SQL no COBOL neste blog.

O modelo de tabela do banco de dados (DB) usado para esse post:

PESSOA
CD_PESSOANOMESOBRENOMEIDADE
1FelipeBarbosa23
2AnaVieira20
3JoãoSantos19
4AlineSilva21
5MairaDantas25

Então, temos acima a tabela denominada de PESSOA, com 4 campos: CD_PESSOA, NOME, SOBRENOME e IDADE. Contendo 5 registros. De modo que a chave (key - FK) desta tabela é o campo CD_PESSOA.

Assim, se for selecionado o nome de uma pessoa na tabela PESSOA para o código de pessoa igual a 1, deve ser retornado "Felipe".
Ou seja, em código SQL: SELECT NOME FROM PESSOA WHERE CD_PESSOA = 1.

Para que um código SQL seja compreendido em código COBOL, é necessário que o SQL esteja entre os comandos EXEC SQL e END-EXEC. Exemplo:

           EXEC SQL
               SELECT NOME
                 INTO :GDA-NM-PSS
                 FROM PESSOA
                WHERE CD_PESSOA = 1
           END-EXEC.

Onde, INTO :GDA-NM-PSS, é onde será armazenado o valor retornado pela execução do SQL.

Segue o exemplo do código de um programa COBOL com o SQL de exemplo apresentado.






A execução do código apresentado:
  1. Executa o SQL Select do NOME na tabela PESSOA para o registros que possua o CD_PESSOA = 1.
  2. Se o SQL for executado normalmente, o retorno será um registro, e o nome que foi selecionado será armazenado dentro da variável COBOL GDA-NM-PSS.
  3. Realiza um Evaluate do SQLCODE para verificar se a execução do comando SQL foi normal. Caso não tenha encontrado o registro para a condição (WHERE) ou tenha acontecido outro problema de execução é acionado o erro.
  4. Mostra a mensagem Nome cadastrado: valor-variável.
A resposta final da execução desse programa, é: Nome cadastrado: Felipe.

Observações:
  • Para que um programa COBOL execute as instruções SQL é necessário fazer a inclusão da biblioteca SQLCA. Para mais informações desta biblioteca clique aqui.
  • Para ver os campos que compõem a biblioteca SQLCA, clique aqui.
  • É uma boa pratica sempre após a execução de um EXEC SQL, realizar a verificação do SQLCODE, como forma verificar a execução da instrução SQL.
  • SQLCODE = +100, significa "que não há registros para a condição do SQL".
Então, para verificar se a execução de um comando SQL no COBOL ocorreu normalmente, veja se o SQLCODE está igual a ZERO, se não estiver é porque aconteceu uma exceção na execução do comando. Neste código a exceção de SQLCODE = +100 foi tratada para informar que não existe dados na base de dados para a condição do Select.

Como realizar um Select com a condição da instrução SQL recebendo um valor dinâmico? Veja no próximo post!


Para Ctrl + C do código acesse aqui.
Consultar a relação de Termos e Abreviaturas acesse aqui.


Até o próximo post!

sábado, 18 de junho de 2016

Antes de começar a codificar

Olá!

Neste post não será apresentado códigos, mas sim, uma boa prática do que fazer antes de começar a codificar seus programas. Pois, um erro comum que vejo nos programadores, em boa parte os iniciantes, é que quando recebem uma definição (especificação, documentação) do trabalho a ser executado, já de imediato partem para a codificação, afinal são programadores.

Entretanto, esses profissionais quando estão no processo de programar o que foi requisitado, acabam se deparando com: estrutura lógica incompleta; pontos do documento não compreendidos corretamente ou totalmente; erros na definição; entre outras situações que levam o programador a parar o que estar fazendo, e rever a definição e até mesmo seu código. De modo, que depois de analisar o trabalho feito até o momento, acaba percebendo que está realizando o que foi pedido de maneira errada.

Assim, ocasionando em retrabalho, perca de tempo, estresse, ou seja, interrompendo e atrapalhando todo o fluxo de trabalho do programador, o que não é nada bom. Porque, conduz a atrasos, acumulação de trabalho, e o pior que é a perda da credibilidade do profissional.

Deste modo, com a experiência fica claro que antes de começar a codificar, o programador pode realizar alguns processos para evitar (minimizar) erros que podem vir à interferir no fluxo do seu trabalho. São:

  • Ler toda documentação
    • ler a definição do que está sendo requisitado, e entender o que estar sendo pedido
  • Verificar se o fluxo dos dados estão corretos
    • analisar se a estrutura lógica dos dados estar correta, afim de encontrar erros na especificação
  • Anotar ou abstrair de maneira ordenada o que deve, como e quando ser feito
    • ter em anotado ou em mente o que deve ser feito, para assim não codificar uma funcionalidade antes mesmo que as funções necessárias para está estejam prontas

Uma das situações, que comprovam que os passos acima são necessários, é um simples comparativo em realizar uma refeição. Pois, antes de começar a cozinhar:

PassosPreparo de uma refeiçãoProgramar
1

Ter o livro de receitas
.
Ter os documentos necessários para o
trabalho
2


Ler a receita a ser feita, e
entender como e quais
ingredientes são necessários
para preparar a refeição
Ler as especificações , analisar o que deve
ser feitoe verificar se o que está definido
está correto
.
3

Ter os ingredientes em mãos
.
Verificar ou obter as permissões do
profissional para a execução do trabalho
4

Lavar e separar os ingredientes
.
Organizar os documentos, local de trabalho,
e o fluxo dos passos a serem executados
5

Rever a receita para verificar
se algum ingrediente foi esquecido
Rever a especificação e verificar se os
passos definidos para a execução do
trabalho está correta
6Começar a cozinharComeçar a programar

Como podemos observar no comparativo é que antes de começar a cozinhar, há o que ser feito. O que não é diferente para antes de começar a codificar um programa.

Então, com a realização de boas práticas realizadas antes de codificar os programas, com o tempo é facilmente percebido o ganho de tempo, velocidade, e principalmente a diminuição de erros na programação.

Enfim, adote boas práticas no seu trabalho, de como realiza-lo. Não necessariamente devem ser estas, elabore ou busque outras, e tenha em mente que antes de realizar algo, no mínimo deve ser pensado antes de realmente a começar a colocar a mão na massa.

Consultar a relação de Termos e Abreviaturas acesse aqui.

Até o próximo post!

sexta-feira, 10 de junho de 2016

Loop simples para limpar uma lista fixa

Olá!

Quando utilizamos uma lista (array) é uma boa prática limpar os registros antes de movimentar os valores para as variáveis.

Assim, se declararmos por exemplo uma lista de 5 posições (occurs), deveria ser feita uma limpeza de cada um dos registros. E uma forma de realizar esse processo, é:

INITIALIZE nomeLista(1)
           nomeLista(2)
           nomeLista(3)
           nomeLista(4)
           nomeLista(5).

Entretanto, se declararmos uma lista com 100 posições, esse INITIALIZE não será uma boa forma de realizar esse processo. Pois, imagine o tamanho que a instrução de inicialização terá para uma lista de 100 ou mais posições.

Então, para realizar o processo de limpeza em listas fixas com muitas posições, é viável realizar um loop para percorrer a lista e limpar cada registro. Segue abaixo um exemplo de estrutura de repetição simples, para percorrer uma lista e limpar cada registro:

* -- LIMPA A LISTA
     PERFORM VARYING TALLY FROM 1 BY 1 UNTIL TALLY > totalDeOcorrencias
         INITIALIZE nomeLista(TALLY)
     END-PERFORM.

Onde:
totalDeOcorrencias = ao número de OCCURS da lista

Consultar a relação de Termos e Abreviaturas acesse aqui.

Até o próximo post!