Olá!
Quando é executado uma instrução Select que está em uma rotina COBOL para selecionar as informações que estão no banco de dados (DB), é importante ter em mente o fluxo que é realizado para que os dados sejam selecionados. Pois, para instruções avançadas de código, muito da otimização dessas depende de como os dados estão sendo processados.
Na imagem abaixo é apresentado o fluxo de dados, desde a requisição do usuário na camada de apresentação, até a resposta dos dados encontrados no DB. O inicio do fluxo de dados que ocorre entre as camadas de processamento está detalhado no post:
O fluxo detalhado:
- O fluxo é iniciado a partir do momento que o usuário realiza uma requisição na camada de apresentação.
- Rotina-A da camada de controles realiza as regras negociais, e requisita a Rotina-B com o propósito de pesquisar os dados no banco de dados.
- Rotina-B executa a instrução SQL para consultar os dados no DB, nos passos:
- Executa a instrução Select;
- Se SQL executado com sucesso, é retornado uma tabela temporária com os registros encontrados;
- Para que o COBOL leia/transfira as informações que estão na tabela temporária para variáveis COBOL, é executado o comando Fetch para fazer a leitura de cada registro desta tabela e mover os dados para as variáveis COBOL.
- Após realizar a leitura de todos os registros, a Rotina-B envia a resposta da sua execução para a Rotina-A.
- Que por sua vez, a Rotina-A continua o seu processamento, e no final envia a sua resposta para a camada de apresentação.
Assim, no passo 3, nota-se que é onde todo o processamento para realizar uma consulta/leitura no DB é feito. Sendo que para o Select que retornar mais de um registro, é necessário a declaração de CURSOR, e também de uma lógica para realizar um laço de repetição (loop Fetch +1) com o objetivo de ler cada registro retornado da resposta do SQL.
Caso o SQL da rotina COBOL seja um Select simples que retorne apenas um registro (exemplo desta instrução foi apresentado no post: SQL - Select simples). A tabela de resposta irá conter apenas um registro, então, não sendo necessário a declaração de CURSOR e loop para leitura do resultado do SQL, conforme o código de exemplo do post citado.
Quando, não haver resposta para o Select executado, a tabela temporária será retornada vazia. Assim, quando realizado a leitura nesta tabela, será retornado que não há mais registros a serem lidos (SQLCODE +100).
Nos próximos posts será demonstrado a declaração de Cursor, e também o código COBOL com o Select que possui dois ou mais registros de repostas (Cursor), ou seja, o exemplo prático do fluxo de dados apresentado na imagem acima.
Consultar a relação de Termos e Abreviaturas acesse aqui.
Felipe Barbosa Ferreira
Felipe Barbosa Ferreira
Até o próximo post!
Nenhum comentário:
Postar um comentário