Order by em coluna Não Base Table

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
tostesr1
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qua, 01 Jun 2005 12:30 am
Localização: RJ

Olá Amigos,

Gostaria de Saber se alguém já fez uma ordenação por um item que não seja de banco de dados.

Ou seja, tenho um bloco base table. Onde recupero os registros
(não base tables) que são exibidos na tela através do post-query.
Sendo que eu preciso ordernar esses registros em ordem alfabetica.

Alguém por acaso já fez algo assim?

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

Cara, isso de forma automática, não tem como.
Mas tem uma forma de se fazer isso, mas é meio complicado. Terá que fazer vários testes.

* Cria uma tabela (pode ser uma Global Temprary Table). Ali, você coloca a PK da sua tabela original e um campo, que conterá o valor não base table.
* Depois, você monta seu bloco baseado numa clausula FROM, com join pra essa tabela, de modo que você possa recuperar esse campo NBT.
* Pra cada registro alterado (NBT) você faz um INSERT ou UPDATE nessa tabela GTT.
* Assim, você pode ordenar seu bloco por esse campo de outra tabela.

Isso é bem complicado de fazer, mas é possível sim.
tostesr1
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qua, 01 Jun 2005 12:30 am
Localização: RJ

Pois é cara, já tinha pensado nisso também. Mas por ser muito complicado desisti e também por questões de performance.

Queria saber se além dessa forma existia outra...

Mas está beleza, vlw pela ajuda.

Abs.
elkabong
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 31 Jul 2006 2:00 pm
Localização: Blumenau - SC

Opa...

Cara tenta fazer o seguinte:

Na clausula ORDER BY do bloco, coloque o seguinte comando:

(SELECT <campo não base table> FROM <tabela de onde ele é buscado>
WHERE <campo que faz join com o bloco> = <bloco.campo de join>)

Exemplo
Tenho um bloco que possui o campo NRO_NFE que é não base table e busco ele da tabela NFE no
post-query e quero ordenar o bloco por ele.
Faço o seguinte na cláusula order by do bloco:

Selecionar tudo

(SELECT NRO_NFE FROM NFE 
 WHERE NRO_SEQ_NFE = LONFVE.NRO_SEQ_NFE)
[]´s
tostesr1
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qua, 01 Jun 2005 12:30 am
Localização: RJ

Cara isso deu certo pra você? Tentei fazer e não deu resultado.

Pelo seguinte motivo:
Não tem como referenciar nome de bloco na clausula order by do bloco.

O meu select do bloco e o seguinte:

Selecionar tudo

SELECT COD_REGIAO,COD_LOCALD,COD_EMP FROM locald_regiao
No post_query recupero a sigla da regiao:

Selecionar tudo

SELECT sig_regiao,
           nom_regiao
INTO   :wrk_sig_regiao,
          :wrk_nom_regiao       
FROM   regiao
WHERE  cod_regiao      = :blk_locald_regiao.cod_regiao
AND    cod_tipo_regiao = 1;

Sendo que as regiões retornam com a siglas desordenadas.

Então como você tinha falado coloquei na clausula order by do bloco o seguinte select:

Selecionar tudo

(SELECT sig_regiao FROM regiao WHERE cod_regiao=:blk_locald_regiao.cod_regiao)
Mas deu erro porque não posso fazer essa referencia dentro do order by.
elkabong
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 31 Jul 2006 2:00 pm
Localização: Blumenau - SC

A referência do bloco na cláusula orderb by tem que ser sem os : (dois pontos)

Já tentou assim ?

[]´s
elkabong
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 31 Jul 2006 2:00 pm
Localização: Blumenau - SC

Opa...

Esqueci de uma coisa...
Tem que colocar um ALIAS para o bloco na propriedade "Alias".
No seu caso deverá ser BLK_LOCALD_REGIAO.

[]´s
tostesr1
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qua, 01 Jun 2005 12:30 am
Localização: RJ

Pow cara vlw!!!!

Agora deu certo!!! O legal é q a alteração é bem simples.
Estava errando no lance do Alias.

Valeu Mesmo.
fnoriko
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Seg, 26 Set 2011 11:17 am
Localização: SP

Olá!
Estou com o mesmo problema, porém ao tentar solucioná-lo desta forma, obtive o erro ORA - 40505.
Há alguma coisa a ser feita, além do especificado?

Obrigada.
marcio.adao
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 53
Registrado em: Sex, 18 Mai 2007 11:52 am
Localização: Descalvado

Olá!
Eu faço da seguinte forma:
Crio uma função de banco que recebe o código e retorna a descrição.
Algo assim:

Selecionar tudo

create or replace
function f_busca_descricao(p_codigo in number) return varchar2 is
  v_retorno tabela.descricao%type; 
  begin
    select descricao
       into v_retorno
      from tabela	
    where codigo= p_codigo;
    return v_retorno;
  exception   
		…
end f_busca_descricao;
Depois coloco a função no ORDER BY do bloco passando o código:

f_busca_descricao(codigo)

Sds
fnoriko
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Seg, 26 Set 2011 11:17 am
Localização: SP

Fiz dessa forma e funcionou.
Muito obrigada!
Responder
  • Informação
  • Quem está online

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