somar dados do bloco com select

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Tenho uma tela que ao clicar no botão consultar.
Ele faz um execute_query no bloco x
Traz os dados, como o cd_pessoafisica nesse bloco
Gostaria de saber, se existe alguma forma.
De fazer um select, após trazer a query, que iguala a cd_pessoafisica e faz um calculo depois.
Deveria trazer a quantidade de pessoas_fisicas, que estão no bloco x. junto com o select

Selecionar tudo


cursor c1 is select cd_pessoafisica, dt_nascimento, nr_cpf, cd_sexo
                from pessoa_fisica
                where cd_pessoafisica = v_pf--(cd_pessoafisica que está no bloco x)
                  and dt_nascimento between (:dt_nasc_inicial) and (:dt_nasc_final)
                   and cd_sexo = nvl(:sexo,cd_sexo) ;
 r1 c1%rowtype;

begin

	open c1;

  loop
	  fetch c1 into r1;
	  exit when c1%notfound;
--faz algumas validações

end loop;

	:quantidade := c1%rowcount - aux;
close c1;
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR
Renato Pasquini
Oracle Developer

Bom dia,
se o que você quer é apenas apresentar a quantidade de registros retornados em um bloco, utilize as propriedades do bloco, existe uma especifica que armazena este valor get_block_property('nome_bloco', QUERY_HITS).
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Mais ou menos isso.
Seria trazer as pf do bloco.
E colocar elas num select

Selecionar tudo

select * from pessoa_fisica
where cd_pessoafisica = :cd_pessoafisica
Mais teria q ser todas as pessoas fisicas do bloco.
E nesse caso, faz calculo a cada pfs.
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR
Renato Pasquini
Oracle Developer

Bom dia,
a coluna pessoa_fisica.cd_pessoafisica é chave primária?
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Sim, é chave primaria.
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

você poderia criar um filtro para trazer só as pessoas físicas no bloco. Depois fazer um loop para percorrer cada registro do bloco e dentro do loop ele armazena o valor do campo em uma variável array. Aí ao final do loop você usa os valores da variável array para fazer o cálculo.

Ou se não criar o filtro para trazer só pessoa física, pode validar antes de entrar no loop, mais ou menos como abaixo:

Selecionar tudo

go_block('nome_bloco');
   first_record;
   loop
     if nome_bloco.campo = pessoafisica then
           variavelarray := nome_bloco.campo;  /*não sei exatamente como fazer a variavel array*/
     else
           next_record;
           exit when campo is null;
     end if;
   end loop;
djoq
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Sex, 27 Jan 2012 8:16 am
Localização: Londres UK

corrigindo o codigo:

Selecionar tudo

go_block('nome_bloco');
   first_record;
   loop
     if nome_bloco.campo = pessoafisica then
           variavelarray := nome_bloco.campo;  /*não sei exatamente como fazer a variavel array*/
     end if;
           next_record;
           exit when campo is null;
   end loop;
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Vou tentar fazer por aqui e te dou uma resposta.
Valeu pela ajuda ai.
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR
Renato Pasquini
Oracle Developer

Então o retorno da query

Selecionar tudo

cursor c1 is select cd_pessoafisica, dt_nascimento, nr_cpf, cd_sexo
                from pessoa_fisica
                where cd_pessoafisica = v_pf--(cd_pessoafisica que está no bloco x)
                  and dt_nascimento between (:dt_nasc_inicial) and (:dt_nasc_final)
                   and cd_sexo = nvl(:sexo,cd_sexo) ;
sempre é 01.
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis

Sim, como cade bloco sempre tem q ter um item navegavel.
Ele roda através daquele item, que possui no canvas.
Coloquei até um campo qualquer, 'Ele não precisaria de nenhum campo'.
Ai ele retorna 1 para cada pf.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes