Populate Group

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
eduardojk
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Qui, 18 Ago 2005 8:58 am
Localização: Curitiba

Caros amigos,

Tenho um forms onde utilizo o código abaixo para montar informações dinâmicas para o menu da aplicação.

--------------------------------------------------------

Selecionar tudo

  USUARIO := :global.menu_usuario;
  SISTEMA  := ASPAS||:global.menu_sistema||ASPAS;
  --
  rg_id := Find_Group( rg_name );
  --
  IF not Id_Null(rg_id) THEN 
    Delete_Group( rg_name ); 
  END IF;
  --
  query := 'SELECT  	INITCAP(d.ds_modulo) descricao, '||
           '        d.cd_modulo modulo              '||
           '  FROM  t_sist_mod_func  a, '||
           '        t_sistema_modulo c, '||
           '        t_modulo         d  '|| 
           ' WHERE a.cd_sistema   = c.cd_sistema  '||
           '   AND a.cd_modulo    = c.cd_modulo   '||
           '   AND c.cd_modulo    = d.cd_modulo   '|| 
           '   AND c.cd_modulo_relacionado  = '||to_char(vBloco)||
           '   AND a.cd_empresa     = '||:global.menu_empresa||
           '   AND c.cd_sistema     = '|| SISTEMA ||' '||
           '   AND a.cd_funcionario = '|| USUARIO ||' '||
           ' ORDER BY to_number(c.seq_modulo)';
  --
  rg_id := Create_Group_From_Query( rg_name, query);
  ------------------------------- 
  -- Populate the record group --
  -------------------------------
  errcode := Populate_Group( rg_id ); 
  if (errcode <> 0) then
    delete_group ( rg_id );
  end if;
-------------------------

Esta prática gera um código onde o select é executado com literais e não bind variable.

Gostaria de saber se alguém tem alguma sugestão para otimizar meu acesso ao banco ?

Observação:
Banco Oracle 10g e Oracle Forms 6i

Grato.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Você não consegue colocar as variáveis dentro do selelct ?
Algo assim:

Selecionar tudo

'   AND a.cd_funcionario = :global.menu_usuario '||
To sem forms aqui pra testar. Mas se isso não funcionar, tenta outras possibilidades, como:
* Colocar ali um :bloco.campo com o valor que você quer.
* Criar uma package SPEC no forms contendo as variáveis que você quer, e depois colocar essas variáveis no seu select.

Acho que uma dessas opções vai dar certo (caso a primeira não funcione).
eduardojk
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Qui, 18 Ago 2005 8:58 am
Localização: Curitiba

Olá Thomas,

O código que eu postei está funcionando perfeiramente, consigo utilizar variáveis e tudo mais.

O que eu busco é melhorar ou mudar a forma como estou buscando as informações no banco, para evitar que cada vez que seja necessário submeter o select que eu mostrei, o banco interprete minhas variáveis como literais.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Sim, da forma que você colocou, você está colocando o valor LITERAL da variável, modificando o SQL cada vez que ele executa. Ou seja, o banco executa o HARD PARSE cada vez, aumentando um monte o custo do SQL.

Mas se você usar uma variável diretamente, o banco usa o MESMO select (como se fossem binds), então só faz o SOFT PARSE.

Execute um trace pra ter certeza. (como eu disse, to sem forms aqui pra testar) :-(
Responder
  • Informação
  • Quem está online

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