separar registros de acordo com condição

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Avatar do usuário
NightSpy
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Ter, 09 Set 2008 4:18 pm
Localização: SP

Olá galera, tudo bem?

Bom, estou tentando resolver um problema aqui.

Tenho um bloco detalhe em forma de grade.... basetable. No bloco cabeçalho(principal) acima desse, faço a pesquisa, e ele é "enchido", depois quero, de acordo com alguma condição, separar os registros...porem estou procurando a melhor maneira de armazenar tais registros, ou armazenar algo para recuperá-los depois...

exemplificando...

tenho 5 registros da grade do bloco detalhes...com um loop percorrerei todos, porem de acordo com uma condição no meio do loop, preciso separar esse registros...tipo, 3 pra lá, 2 pra cá...hehehee depois vou imprimir de uma forma esses 3 e de outra forma esses 2....

alguma idéia?!
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Utilize o gatilho POST-QUERY, se o bloco principal for de banco de dados, nele você pode tratar a sua condição exemplo:

Selecionar tudo

If (:bloco.item = 'X') THEN
  :bloco.flag := 'Y';
Else
  :bloco.flag := 'Z';
End if;
Espero ter ajudado.
Avatar do usuário
NightSpy
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Ter, 09 Set 2008 4:18 pm
Localização: SP

Opa, obrigado pela atençao dispensada.

Caro Diego, fazer a condição para separar os registros estou fazendo já, de acordo com outra tabela, etc e tals..

o meu problema é que, esse if no seu exemplo precisa guardar mais de um registro, ir acumulando, para depois eu percorrer ou ter como recuperar para tratar, entende??

estou estudando aqui como usar vetores.... acho q estou chegando próximo a uma solução.

qualquer ajuda é bemvinda.

abraços
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

você pode criar duas variaveis mais ou menos assim:

Selecionar tudo

var1   tabela%type;
var2   tabela%type;

var1.campo := :bloco.campo;
var2.campo := :bloco.campo;


Ps. não me recordo se é %type ou %rowtype, no caso vai criar uma variavel do "tipo" da tabela, da uma olhada como usar isso, acho que vai ser mais facil, ou então criar outros blocos,

falows
Avatar do usuário
NightSpy
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Ter, 09 Set 2008 4:18 pm
Localização: SP

Diegão beleza..acho q resolvi mais ou menos desta maneira:

Selecionar tudo

declare
 aux number:=0;
 msl number:=:SYSTEM.MESSAGE_LEVEL;
	
 TYPE rec IS RECORD 
 (ccia pr_ordem_de_producao_cab.opca_id_cia%type,
  ffil pr_ordem_de_producao_cab.opca_id_filial%type,
  oord pr_ordem_de_producao_cab.opca_id_ordem%type);
       
 TYPE llista IS TABLE OF rec
 INDEX BY BINARY_INTEGER;
	
 ---------------------------------------------------

 lista_pprop120 llista;
 lista_pprop125 llista;


desta maneira ao fazer o loop no meu bloco em grade, passando por todos os registros, ora jogo na lista_pprop120, ora na lista_pprop125 de acordo com minhas condições..claro, como precisa de um índice, coloquei 2 contadores q são acrescentados a cada volta do loop(cada qual dentro de seu IF condicional..claro), ou a cada registro... assim tem em uma lista, por exemplo ccia(1); ccia(2) e na outra a mesma coisa porem com uma sequência própria.

depois faço outro loop para percorrer tais listas para imprimir..como meus contadores já estão cheios, faço de tras pra frente (a ordem não me interessa), até q meu contador volte a 0, assim saindo do loop.

Ainda estou com problemas com este form, porem só de resolver esse rolo deu ânimo.

abraços
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Qualquer coisa posta aí, a gente tenta dar ideias, as vezes não da certo e tals, mas abre a cabeca do cara, poderia talvez até usar dois recordgroups, já carregando eles com a consulta condicional para cada caso,

ou ter feito dois cursores, um pra cada situacao e ai já imprimir,

=]
Leonardo Santos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qui, 17 Dez 2009 10:19 am
Localização: Florianópolis - SC

Bom dia Pessoal,

Sou novo no mundo Oracle e precisava de um apoio de vocês.
Estou desenvolvendo algumas consultas e estou quebrando a cabeça com a seguinte:

Tenho uma tabela que contem os dados dos funcionários, nome, função, salário e etc...

Preciso fazer uma consulta que traga o maior salário de cada função presente na tabela assim como o número de funcionários com esta função, e tem uma restrição, deve ser informado estes dados apenas das funções que possuem mais de 2 funcionários.

Alguém pode me ajudar?

Obrigado
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

maior salario utilize a funcao MAX(valor_salario)

condicao de mais de dois funcionarios

Selecionar tudo

having count(*) >= 2
Leonardo Santos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qui, 17 Dez 2009 10:19 am
Localização: Florianópolis - SC

Bom dia Diego,

Obrigado pela resposta rápida.

Sobre a solução a função MAX eu já conhecia mas a having count eu não me lembrava.

A minha dificuldade é a seguinte, é possível trazer estas duas informações(maior salário da função e número de funcionarios desta função) em uma única consulta? sem precisar especificar cada função.

Será que é necessário utilizar o PL/SQL ?
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Selecionar tudo

select max(campo1), count(campo2), campo3
from tabela
where condição
group by campo3
having count(campo2) >0;
algo assim?
Leonardo Santos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qui, 17 Dez 2009 10:19 am
Localização: Florianópolis - SC

obrigado Sergio,

Vou testar ainda hoje e te aviso, não acredito que era tão simples...
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara.

Eu so fui ler o tópico todo agora. Pelo que tu fala parece que ta trabalhando com a tabela emp.

heheheheh

Eu não tenho ela disponpivel aqui, mas se é algo assim

Selecionar tudo

select max(sal), count(empno), job
from emp
group by job
having count(empno) >2
Se não é , pega aplica a tua realidade.

Qualquer duvida posta aew.
Leonardo Santos
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qui, 17 Dez 2009 10:19 am
Localização: Florianópolis - SC

Sergio

Muito obrigado pela força, resolveu minha dúvida.
Responder
  • Informação
  • Quem está online

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