Pular para o conteúdo

Criação de DataBlock no Oracle Forms com Stored Procedure (Forms – Block Procedure): Guia Completo

Forms – Block Procedure

Olá pessoal, tudo bem?

Saíndo um pouco dos processos de banco de dados que citei nos post anteriores, vamos agora trabalhar com um item do FORMS da Oracle que é criar um DataBlock baseado em Store Procedure.

Esta opção permite tratar os dados retornados do banco de uma forma rápida ou até mesmo, no próprio banco de dados. Esta operação nos fornece uma falicidade maior pois toda regra e inteligência do processo ficará dentro do Código PL/SQL. Também, nos fornece uma grande velocidade no tratamento das informações.

Existe dois modos de criar a procedure que retornará os dados para a tela do usuário. Uma é criar a package dentro do Forms e a outra é no banco de dados, sabendo que esta criada no banco de dados ficará com uma performance melhor, pois não teremos tráfego de dados na rede durante o tratamento das informações, ou seja, caso você precise recuperar os dados do banco e depois fazer um Loop para tratar as informações ou recuperar outros dados dentro do Loop, a package estando no banco, todo o tratamento vai ser no servidor do banco oracle e não na máquina do usuário.

Este exemplo que vamos usar, lista em um bloco do forms o texto “Arquivo 1”, depois “Arquivo 2”, e assim até o 10.

Primeiro passo: Criar uma Package com um procedure no forms ou no banco de dados conforme abaixo:

PACKAGE PCK_LIST_ARQ IS

TYPE R_LIST IS RECORD(NOME VARCHAR2(300));
TYPE T_LIST IS TABLE OF R_LIST INDEX BY BINARY_INTEGER;
PROCEDURE LIST_ARQ(P_LIST IN OUT T_LIST);

END PCK_LIST_ARQ;

PACKAGE BODY PCK_LIST_ARQ IS

PROCEDURE LIST_ARQ(P_LIST IN OUT T_LIST) IS
BEGIN
FOR i IN 1..10
LOOP
P_LIST(i).NOME := 'ARQUIVO '||LPAD(i,2,'0');
END LOOP;
END LIST_ARQ;

END PCK_LIST_ARQ;

Nota que estou usando Types do tipo Record que é os registros, e outro do tipo Table baseado no anterior, ou seja, é como se fosse uma tabela com as colunas, mas isso em memória. Criei também a Procedure onde abro um Loop e alimento a coluna da tabela (Type) como demonstrado. Repare que o type P_LIST é minha tabela, a letra i é meu indexador, sempre entre parenteses, e por fim, a coluna deste type. O i é apenas um contador que ao ser declaro no For, o valor atribuido é 1, 2, 3, 4, 5… até 10 que é onde informei de 1..10.

Segundo passo: Crie um Block no forms utilizando o Data Block Wizard e escolha o tipo Procedure.

Terceiro passo: Clique na aba Query e informe o nome da Package + o nome da Procedure, clique em Refresh, escolha a coluna e mude ela de lado, informe no argumento do parâmetro de retorno da procedure uma variável.

Em seguida clique em Finish. Vai aparecer outra janela do Forms que irá solicitar o canvas, o tipo, etc.

As abas Insert, Update, Delete, Lock são usadas caso o teu bloco do forms irá realizar uma operação de DML. Mas segue o mesmo conceito.

O próprio Wizard do forms criará o bloco, o item, e a trigger de QUERY, que no nosso caso não estamos fazendo DML via procedure. Segue abaixo como ficará:

Observações:

O nome das colunas no block, aconselho colocar o mesmo nome do que foi criado no Type da Package.

Abraços,

JElias

JElias

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress