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_PESSOA | NOME | SOBRENOME | IDADE |
1 | Felipe | Barbosa | 23 |
2 | Ana | Vieira | 20 |
3 | João | Santos | 19 |
4 | Aline | Silva | 21 |
5 | Maira | Dantas | 25 |
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
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:
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 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.
Nenhum comentário:
Postar um comentário