quinta-feira, 28 de julho de 2016

Convertendo String - Upper ou Lower Case

Olá!

Para não ter problemas de case sensitive ao realizar comparações de variáveis alpha "PIC X(nnn)", é uma boa prática transformar as strings das variáveis em caixa alta ou baixa (maiúscula ou minuscula).

  • O comando FUNCTION UPPER-CASE (variável), transforma todo conteúdo de uma variável para maiúscula. 
  • E o comando FUNCTION LOWER-CASE (variável), transforma todo conteúdo de uma variável para minuscula. 

Exemplo da utilização desses comandos:
Neste exemplo será utilizado duas variáveis uma com um texto contante, e outra para armazenar a simulação de um texto enviado para a entrada do programa, segue a declaração das variáveis:

      * -- VARIAVEIS TEXTOS
       77 GDA-TX-EXEMPLO                PIC  X(015) VALUE '-FELIPE-TESTES-'.
       77 GDA-TX-ENTRADA                PIC  X(015) VALUE SPACES.

Movimentação do texto de entrada com letras maiúsculas e minusculas:
      * -- MOVIMENTA O TEXTO PARA SIMULAR DADOS DE ENTRADA
           MOVE '-FeliPe-tEsTes-'       TO GDA-TX-ENTRADA.

Agora com o comando UPPER-CASE para converter todos caracteres para maiúsculo, é realizada a verificação de igualdade:
      * -- VERIFICA SE O TEXTO DE ENTRADA == TEXTO EXEMPLO
             IF (FUNCTION UPPER-CASE(GDA-TX-ENTRADA)) NOT EQUAL
                (FUNCTION UPPER-CASE(GDA-TX-EXEMPLO))
                     PERFORM 999001-ERRO-01
             END-IF.

Ou seja, deste modo será comparado:
IF '-FELIPE-TESTES-' NOT EQUAL 
   '-FELIPE-TESTES-'
   PERFORM 999001-ERRO-01
END-IF.


De modo que a conversão seja realizada para que a string fique com o texto em caixa baixa, utilize conforme:

FUNCTION LOWER-CASE(texto)


Exemplo:

      * -- MOVIMENTA/CONVERTE O TEXTO PARA CAIXA BAIXA
           MOVE FUNCTION LOWER-CASE(GDA-TX-ENTRADA) TO GDA-TX-MINUSCULA.


Logo abaixo há o código COBOL respectivo aos exemplos acima:

Convertendo String Upper ou Lower Case Felipe Barbosa Ferreira



Então, para realizar a comparação entre strings (alpha / texto), é bom ter em mente:

1 - Variáveis alpha armazenam espaços em branco à direita, se não totalmente preenchidas.
      Exemplo:
       77 GDA-TX-TESTE                  PIC  X(010) VALUE SPACES.
           MOVE 'Felipe'                TO GDA-TX-TESTE.
           DISPLAY GDA-TX-TESTE.
           Resultado = 'Felipe    '.


2 - Para não ter problemas com Case Sensitive, transforme a string das variáveis que estão sendo comparadas para maiúscula ou minuscula.



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

Até o próximo post!

domingo, 10 de julho de 2016

Conversão de tipo de dado

Olá!

Abaixo segue uma tabela de conversão de tipo de dado, que apresenta os valores (tamanho) mais utilizados nas linguagens Natural, DB2 e COBOL. Também, demonstrando a quantidade em bytes que uma variável COBOL ocupa em memoria com as declarações de tipo de dado.

Tabela:
Conversão de tipo de dado
NATURALDB2COBOLQUANTIDADE BYTES
I2SMALLINTS9(004) COMP2
I4INTEGERS9(009) COMP4
A8CHAR(008)X(008)8
A10DATEX(010)10
P14DECIMAL(14,0)S9(014) COMP-38
P15,2DECIMAL(15,2)S9(15)V9(2) COMP-39

Os tipos de dados comuns para declarações de numéricos em DB2 é Smallint e Integer. Então, este é um fator que torna uma boa prática declarar variáveis numéricas no COBOL com S9(004) ou S9(009). Pois, alem de normalizar o seu ambiente, facilita a integração do COBOL com DB2 e Natural. 

Para as variáveis alpha (carácter) o valor do tamanho é o mesmo, somente diferenciando a forma de declaração.

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

Até o próximo post!

sábado, 2 de julho de 2016

SQL - Select dinâmico (Where)

Olá!

Neste post será apresentado como realizar uma pesquisa na base de dados (DB) de forma dinâmica. Onde, o resultado da consulta do Select depende dos valores variáveis que serão utilizados na comparação do Where.

Valor variável?
Os dados que serão utilizados como condição para realizar a pesquisa no DB podem ser fixos ou dinâmicos no código SQL. O valor dinâmico é gerado de acordo com a regra de negócio, exemplo: valor deve ser da entrada do programa; valor é gerado por meio de comparações; valor é gerado a partir da data corrente do sistema; etc.

  • E este valor dinâmico será armazenado em uma variável host (variável usada em código SQL).

No post anterior demonstrei o Select com o Where fixo, mas se na tabela haver vários registros, será necessário criar um SQL para cada registro. E isso não é nada prático.

Veja como adicionar uma variável COBOL em um código SQL, para consultar as informações no DB.

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

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

Na tabela acima 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, para consultar as informações de Felipe, o SQL deve ser:
    SELECT NOME
         , SOBRENOME
         , IDADE
      FROM PESSOA
     WHERE CD_PESSOA = 1

E para consultar as informações de Ana:
    SELECT NOME
         , SOBRENOME
         , IDADE
      FROM PESSOA
     WHERE CD_PESSOA = 2

E para consultar as informações de Maira:
    SELECT NOME
         , SOBRENOME
         , IDADE
      FROM PESSOA
     WHERE CD_PESSOA = 5
  • Repare que a única diferença para consultar as informações das pessoas é o valor de comparação no Where do SQL.

Então, para não repetir código e reutilizar o mesmo SQL para pesquisar as informações de qualquer pessoa, primeiramente temos que definir a variável que irá receber o valor de comparação, neste caso o valor de código de pessoa.

Se não especificado o tamanho da variável, consulte a estrutura de definição da tabela. A estrutura da tabela deste exemplo, é:

CREATE TABLE PESSOA 
    (
      CD_PESSOA INTEGER
    , NOME      VARCHAR (50)
    , SOBRENOME VARCHAR (50)
    , IDADE     SMALLINT
    );

Assim, a variável host que será definida na LOCAL-STORAGE do programa terá o formato:

77 GDA-CD-PESSOA            PIC S9(009) COMP VALUE ZEROS.

E será utilizada no código da rotina da seguinte forma:
    SELECT NOME
         , SOBRENOME
         , IDADE
      FROM PESSOA
     WHERE CD_PESSOA = :GDA-CD-PESSOA

Desta forma antes de executar a pesquisa, é somente realizar a movimentação do código da pessoa que queira consultar para a variável GDA-CD-PESSOA.

Note que antes da variável host há ":". Este dois pontos indica que no código SQL está sendo usado uma variável do COBOL.

Abaixo, o código de exemplo com um Select para consultar o nome da pessoa com Where dinâmico, onde o campo da tabela CD_PESSOA é comparado com o valor da variável GDA-CD-PESSOA:

SQL - Select Dinâmico Felipe

SQL - Select Dinâmico Felipe
SQL - Select Dinâmico Felipe
SQL - Select Dinâmico Felipe
SQL - Select Dinâmico Felipe




















































Podemos observar que antes de executar a consulta do DB é movimentado o valor do código da pessoa a ser pesquisada. O resultado da execução desse código:

Nome cadastrado para código pessoa 1 : Felipe
Nome cadastrado para código pessoa 2 : Ana
Nome cadastrado para código pessoa 5 : Maira

É uma boa prática limpar as variáveis que irão receber dados, conforme o INITIALIZE executado antes da pesquisa do nome no DB.

Atenção:
Variáveis host numéricas devem ser compactadas.

Enfim, conforme ao inicio do post o valor movimentado para a variável host na condição do SQL pode ser atribuído da entrada da rotina, ou qualquer outra regra negocial.

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


Até o próximo post!