domingo, 12 de março de 2017

Equivalência tamanho variável SQL / COBOL

Olá!

Ao declarar variáveis no COBOL para serem utilizadas em comandos SQLs (ou seja, variáveis hosts), temos que assegurar que elas são compatíveis com o mesmo tipo e tamanho de dado da coluna do banco de dados (DB).

Pois, o pré-compilador do COBOL realiza a verificação se os tipos de dados são equivalentes entre a variável declarada e a coluna da tabela do DB.

Na tabela abaixo há a representação de cada variável host COBOL equivalente para cada tipo de dado SQL:

Tipo de dado SQLVariável host COBOL
SMALLINT
S9(004) COMP-4
S9(004) COMP-5
S9(004) COMP
S9(004) BINARY

INTEGER
S9(009) COMP-4
S9(009) COMP-5
S9(009) COMP
S9(009) BINARY

DECIMAL(p,s)
NUMERIC(p,s)

S9(p-s)V9(s) COMP-3
S9(p-s)V9(s)

Se DECIMAL com s=0 (sem valores após a virgula), usar:
S9(p)V

Se NUMERIC com s=0 (sem valores após a virgula), usar:
S9(p)

Para armazenar somente os números após a vírgula, usar:
SV9(s)

Se o compilador não suportar 31 dígitos decimal, usar:
USAGE COMP-2

Sendo "p" a precisão de números, e "s" a escala

REAL
FLOAT(n)

COMP-1
Sendo "n": 1<= n <= 21

DOUBLE
FLOAT(n)

COMP-2
Sendo "n": 22 <= n <= 53

BIGINT
S9(018) COMP-4
S9(018) COMP-5
S9(018) COMP
S9(018) BINARY

CHAR(n)
Sendo "n" a quantidade de caracteres (tamanho fixo).
01 variavel-nome PIC X(n).

VARCHAR(n)
Sendo "n" a quantidade de caracteres (tamanho dinâmico).
01 variavel-nome.
     49 nome-tamanho PIC S9(004) USAGE BINARY.
     49 nome-variavel PIC X(n).

Onde, nome-tamanho é a variável que irá armazenar a
quantidade de caracteres presentes em nome-variavel.

DATE
PIC X(n)
Sendo "n" determinado pela regra de negocio,
caso contrario "n" deve ser no minimo 10

TIME
PIC X(n)
Sendo "n" determinado pela regra de negocio,
caso contrario "n" deve ser no minimo 6,
ou 8 para incluir os segundos

TIMESTAMP
PIC X(n)
Sendo "n" no mínimo 19, para incluir os microssegundos "n"
deve ser 26



Exemplo da declaração de variáveis hosts para a tabela INSCRICOES:

Definição da tabela:
        CREATE TABLE INSCRICOES
           (
               CODIGO_PESSOA  INT         NOT NULL
           ,   NOME           CHAR(30)    NOT NULL
           ,   SOBRENOME      VARCHAR(50) WITH DEFAULT 'em branco'
           ,   DATA_INSCRICAO DATE        WITH DEFAULT GETDATE()
           ,   HORA_SAIDA     TIME
           ,   TS_CHEGADA     TIMESTAMP
           ,   VALOR          DOUBLE
           )

Declaração COBOL para as variáveis hosts, conforme:
      * -- Variaveis hosts da tabela INSCRICOES
       01  TAB-INSCRICOES.
           03  CODIGO-PESSOA            PIC S9(009).
           03  NOME                     PIC  X(030).
           03  SOBRENOME.
               49 TAMANHO-SOBRENOME     PIC S9(004) USAGE BINARY.
               49 TEXTO-SOBRENOME       PIC  X(050).
           03  DATA_INSCRICAO           PIC  X(010).
           03  HORA_SAIDA               PIC  X(008).
           03  TS_CHEGADA               PIC  X(026).
           03  VALOR                    USAGE COMP-2.

O tipo de dado SQL não está na tabela acima, veja mais tipos de dados aqui.

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


Até o próximo post!

sábado, 25 de fevereiro de 2017

Armazenamento de compactados

Olá!

Ao trabalhar com variáveis numéricas compactadas, ocorre a necessidade de interpretar qual a quantidade que será utilizada no armazenamento, e também se o intervalo de valores suportados pela variável é suficiente para a aplicação.

No COBOL há os seguintes formatos de itens compactados:
  • COMPUTATIONAL ou COMP (binário)
    • Este é equivalente ao binário, a palavra Computational é sinônimo de binário.

  • COMPUTATIONAL-1 ou COMP-1 (ponto flutuante)
    • Utilizado para itens com ponto flutuante interno com precisão única, esses possuem 4 bytes de comprimento.

  • COMPUTATIONAL-2 ou COMP-2 (ponto flutuante longo)
    • Utilizado para itens com ponto flutuante interno com precisão dupla, esses possuem 8 bytes de comprimento.


  • COMPUTATIONAL-4 ou COMP-4 (binário)
    • Equivalente ao um item binário.

  • COMPUTATIONAL-5 ou COMP-5 (binário nativo)
    • Os dados armazenados em COMP-5 possuem o truncamento no tamanho do campo binário, em vez do limite especificado pela PICTURE na declaração Cobol.
    • Quando um item COMP-5 é referenciado, todo o campo binário é utilizado na operação.
    • A opção do compilador TRUNC(BIN) faz com que todos os itens de dados binários (USAGE BINARY, COMP, COMP-4) sejam tratados como itens COMP-5.

A tabela abaixo mostra o armazenamento ocupado e intervalo de valores suportados para cada PICTURE de um item COMP-5.



A PICTURE para um item COMP-5 pode ser definida com o fator de escala, isto é, posições inteiras ou decimais implícitas, por exemplo a declaração PICTURE S99V99 COMP-5 é representado com uma halfword binária. Assim, os valores suportados apresentados na tabela devem ser dimensionados adequadamente para quando ocorrer essa situação.
FELIPE BARBOSA FERREIRA

Até o próximo post!

sábado, 18 de fevereiro de 2017

Variáveis numéricas (Computational items)

Olá!

Para os sistemas realizam cálculos de valores que abrangem uma grande quantidade de dados, ou também, para aqueles que possuem a necessidade de trabalhar com várias casas decimais, há sempre a preocupação quanto a declaração variável numérica; qual o tipo de dado?; tamanho?; com ou sem sinal?; São algumas questões sobre a variável a ser declarada. 

Nos sistemas bancários por exemplo, pode ser facilmente visto a declaração de uma variável numérica da seguinte forma: PIC S9(15)V9(02). 

Nossa, é realmente necessária uma variável com 17 posições? Sim. Pense no faturamento de um banco de proporção mundial. Então, possivelmente somente 2 posições após o ponto flutuante não serão suficientes, assim, alguns sistemas precisam trabalhar com variáveis com mais de 17 posições.

  • Itens computacionais: é um valor usado em operações aritméticas. Deve ser numérico. E um item de grupo denominado como item computacional, possui os seus elementos numéricos.

No Cobol os itens computacionais possuem o comprimento padrão de 18 dígitos decimais, exceto para um item PACKED-DECIMAL que pode conter o comprimento máximo de 31 dígitos decimais.

O comprimento de um item PACKED-DECIMAL pode variar de acordo com a opção do compilador que estiver em vigor. Sendo, se a opção ARITH(COMPAT) estiver ativa o item PACKED-DECIMAL possui o comprimento máximo de 18 dígitos decimais, caso a opção ARITH(EXTEND) for ativada o comprimento máximo do item PACKED-DECIMAL passa a ser de 31 dígitos decimais.

A declaração (PIC - PICTURE) de um item computacional pode conter apenas S9VP, conforme:
S - Um sinal operacional
9 - Uma ou mais posições numéricas de caracteres
V - Um ponto decimal implícito
P - Uma ou mais posições de escala decimal

Exemplo: PIC S9(15)V9(02)

Observação: itens COMP-1 e COMP-2 items não possuem PICTURE, pois utilizam ponto flutuante interno com precisão.

A quantidade de armazenamento ocupada por um item binário depende do número de dígitos decimais definidos em sua cláusula PICTURE, veja na tabela abaixo:

Dígitos na cláusula PICArmazenamento ocupado
S9(01) até S9(04)2 bytes (halfword)
S9(05) até S9(09)4 bytes (fullword)
S9(10) até S9(18)8 bytes (doubleword)

Os dados binários são big-endian: o sinal operacional está contido no bit mais à esquerda. E os itens de dados BINARY, COMPUTATIONAL e COMPUTATIONAL-4 podem ser afetados pela opção do compilador TRUNC.

Veja também a comparação dos tamanhos de tipo de dado no post: Conversão de tipo de dado.
FELIPE BARBOSA FERREIRA

Até o próximo post!