Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
priajf
Rank: DBA Pleno
Mensagens: 297 Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Sex, 08 Fev 2013 1:19 pm
Boa Tarde Pessoal,
Como faço pra ordenar um campo string de acordo com um select?
Tenho um campo Sistema, em que posso digitar, letras seguidos de sinais.
Digito então. C+,D+,J+.
Numa tabela essas letras possuem uma ordem a segui-las.
Selecionar tudo
select distinct i.cd_item,t.cd_ordem_exibicao ordem_tabela, i.cd_ordem_exibicao ordem_item
from tabela_sistema t,
itens_tabela_sistema i
where i.cd_sistema = t.cd_sistema
order by t.cd_ordem_exibicao,i.cd_ordem_exibicao;
--Aparece então desse jeito
cd_item -- ordem_tabela --- ordem_item
D 1 1
C 1 2
J 2 1
Gostaria que meu parâmetro retornasse esse cd_item, de acordo com a ordem
D+ C+ J+. Não importando da forma q eu digitar.
Alguém me daria uma ideia pra realizar essa validação?
priajf
Rank: DBA Pleno
Mensagens: 297 Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Sex, 08 Fev 2013 1:49 pm
Pensei num jeito pessoal.
Mais creio que seja o mais correto. porque sempre vai ter mais de 20 ordens tanto de tabela, quanto de item.
Gostaria de fazer algo mais dinâmico.
Selecionar tudo
.
.
.
.
.
declare
cursor c1 is
select distinct i.cd_item,t.cd_ordem_exibicao ordem_tabela, i.cd_ordem_exibicao ordem_item
from tabela_sistema t,
itens_tabela_sistema i
where i.cd_sistema = t.cd_sistema
order by decode(i.cd_item,v_item,t.cd_ordem_exibicao,i.cd_ordem_exibicao);
r1 c1%rowtype;
begin
open c1;
loop
fetch c1 into r1;
exit when c1%notfound;
if r1.cd_item = v_item then
if r1.ordem_tabela = 1 then
if r1.ordem_item = 1 then
v_where1 := r1.cd_item||v_resultado;
elsif r1.ordem_item = 2 then
v_where := r1.cd_item||v_resultado;
end if;
end if;
end if;
rogenaro
Rank: DBA Pleno
Mensagens: 232 Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro
Qua, 13 Fev 2013 1:33 pm
Se entendi bem, você poderia atribuir a a cada valor de cd_item um valor para ordenação, usando o decode:
Selecionar tudo
order by decode( i.cd_item, 'D', 1, 'C', 2, 'J', 3 /*, demais valores possíveis...*/ ), t.cd_ordem_exibicao, i.cd_ordem_exibicao
Agora se os possíveis valores de cd_item podem mudar a qualquer momento, ou se a lista for muito extensa, talvez seria melhor criar uma coluna (ou mesmo uma tabela) para armazenar este parâmetro de ordenação para cada código criado.
priajf
Rank: DBA Pleno
Mensagens: 297 Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Qui, 14 Fev 2013 8:59 am
Dae Rogenaro
Realmente a lista é enorme, possui 89 itens.
E a única lógica que ainda consigo pensar é fazer esse código
Porém fazer 89 verificações, e colocar 89 parâmetros, como o v_where1 e v_where.
Não iria ficar algo muito inteligente.
Selecionar tudo
if r1.ordem_tabela = 1 then
if r1.ordem_item = 1 then
v_where1 := r1.cd_item||v_resultado;
elsif r1.ordem_item = 2 then
v_where := r1.cd_item||v_resultado;
...........
end if;
end if;
Como eu poderia fazer isso, tens algum exemplo?
"talvez seria melhor criar uma coluna (ou mesmo uma tabela) para armazenar este parâmetro de ordenação para cada código criado."
[
priajf
Rank: DBA Pleno
Mensagens: 297 Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Sex, 15 Fev 2013 10:15 am
Gente, consegui fazer, porém ficou algo horrível.
Alguém teria uma ideia de como deixar isso mais bonito. rsrs
Selecionar tudo
v_where varchar2(2000);
v_item varchar2(20);
v_resultado varchar2(10);
v_sinal char(3);
v_fenotipo varchar2(500);
v_tab1_item1 varchar2(10);
v_tab1_item2 varchar2(10);
v_tab1_item3 varchar2(10);
v_tab1_item4 varchar2(10);
v_tab1_item5 varchar2(10);
v_tab1_item6 varchar2(10);
v_tab1_item7 varchar2(10);
v_tab1_item8 varchar2(10);
v_tab1_item9 varchar2(10);
v_tab1 varchar2(2000);
v_tab2_item1 varchar2(10);
v_tab2_item2 varchar2(10);
v_tab2_item3 varchar2(10);
v_tab2_item4 varchar2(10);
v_tab2_item5 varchar2(10);
v_tab2_item6 varchar2(10);
v_tab2 varchar2(2000);
v_tab3_item1 varchar2(10);
v_tab3_item2 varchar2(10);
v_tab3 varchar2(2000);
v_tab4_item1 varchar2(10);
v_tab4_item2 varchar2(10);
v_tab4 varchar2(2000);
v_tab5_item1 varchar2(10);
v_tab5_item2 varchar2(10);
v_tab5 varchar2(2000);
v_tab6_item1 varchar2(10);
v_tab6_item2 varchar2(10);
v_tab6_item3 varchar2(10);
v_tab6_item4 varchar2(10);
v_tab6 varchar2(2000);
v_tab7_item1 varchar2(10);
v_tab7 varchar2(2000);
v_tab8_item1 varchar2(10);
v_tab8_item2 varchar2(10);
v_tab8_item3 varchar2(10);
v_tab8_item4 varchar2(10);
v_tab8 varchar2(2000);
v_tab9_item1 varchar2(10);
v_tab9_item2 varchar2(10);
v_tab9 varchar2(2000);
v_tab10_item1 varchar2(10);
v_tab10_item2 varchar2(10);
v_tab10_item3 varchar2(10);
v_tab10_item4 varchar2(10);
v_tab10 varchar2(2000);
v_tab11_item1 varchar2(10);
v_tab11_item2 varchar2(10);
v_tab11 varchar2(2000);
v_tab12_item1 varchar2(10);
v_tab12_item2 varchar2(10);
v_tab12 varchar2(2000);
v_tab13_item1 varchar2(10);
v_tab13_item2 varchar2(10);
v_tab13_item3 varchar2(10);
v_tab13 varchar2(2000);
v_tab14_item1 varchar2(10);
v_tab14_item2 varchar2(10);
v_tab14_item3 varchar2(10);
v_tab14_item4 varchar2(10);
v_tab14_item5 varchar2(10);
v_tab14 varchar2(2000);
v_tab15_item1 varchar2(10);
v_tab15_item2 varchar2(10);
v_tab15_item3 varchar2(10);
v_tab15 varchar2(2000);
v_tab16_item1 varchar2(10);
v_tab16_item2 varchar2(10);
v_tab16_item3 varchar2(10);
v_tab16 varchar2(2000);
v_tab17_item1 varchar2(10);
v_tab17_item2 varchar2(10);
v_tab17_item3 varchar2(10);
v_tab17_item4 varchar2(10);
v_tab17_item5 varchar2(10);
v_tab17_item6 varchar2(10);
v_tab17_item7 varchar2(10);
v_tab17_item11 varchar2(10);
v_tab17_item12 varchar2(10);
v_tab17 varchar2(2000);
v_tab18_item1 varchar2(10);
v_tab18 varchar2(2000);
v_tab19_item1 varchar2(10);
v_tab19 varchar2(2000);
v_tab20_item1 varchar2(10);
v_tab20_item2 varchar2(10);
v_tab20_item3 varchar2(10);
v_tab20_item4 varchar2(10);
v_tab20_item5 varchar2(10);
v_tab20_item6 varchar2(10);
v_tab20_item7 varchar2(10);
v_tab20 varchar2(2000);
v_tab21_item1 varchar2(10);
v_tab21_item2 varchar2(10);
v_tab21_item3 varchar2(10);
v_tab21_item4 varchar2(10);
v_tab21_item5 varchar2(10);
v_tab21_item6 varchar2(10);
v_tab21_item7 varchar2(10);
v_tab21_item8 varchar2(10);
v_tab21_item9 varchar2(10);
v_tab21_item10 varchar2(10);
v_tab21 varchar2(2000);
v_tab22_item1 varchar2(10);
v_tab22_item2 varchar2(10);
v_tab22_item3 varchar2(10);
v_tab22_item4 varchar2(10);
v_tab22 varchar2(2000);
v_tab23_item1 varchar2(10);
v_tab23_item2 varchar2(10);
v_tab23 varchar2(2000);
v_tab24_item1 varchar2(10);
v_tab24 varchar2(2000);
begin
if :ds_fenotipagem is not null then
if substr(:ds_fenotipagem,length(:ds_fenotipagem),1) <> ',' then
v_fenotipo := :ds_fenotipagem||',';
else
v_fenotipo := :ds_fenotipagem;
end if;
for i in 1..length(v_fenotipo) loop
if substr(v_fenotipo,i,1) in ('+','-') then
v_resultado := substr(v_fenotipo,i,1);
elsif substr(v_fenotipo,i,1) = ',' then
declare
Cursor c1 Is
Select i.cd_item,
t.cd_ordem_exibicao ordem_tabela,
i.cd_ordem_exibicao ordem_item
from tabela_sistema t,
itens_tabela_sistema i
where i.cd_sistema = t.cd_sistema
and i.cd_item = v_item
order by t.cd_ordem_exibicao, i.cd_ordem_exibicao;
r1 c1%rowtype;
begin
open c1;
loop
fetch c1 into r1;
exit when c1%notfound;
if r1.cd_item = v_item then
if r1.ordem_tabela = 1 then
if r1.ordem_item = 1 then
v_tab1_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab1_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab1_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab1_item4 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 5 then
v_tab1_item5 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 6 then
v_tab1_item6 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 7 then
v_tab1_item7 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 8 then
v_tab1_item8 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 9 then
v_tab1_item9 := r1.cd_item||v_resultado||'%';
end if;
v_tab1 := v_tab1_item1||v_tab1_item2||v_tab1_item3||v_tab1_item4||v_tab1_item5||v_tab1_item6||
v_tab1_item7||v_tab1_item8||v_tab1_item9;
elsif r1.ordem_tabela = 2 then
if r1.ordem_item = 1 then
v_tab2_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab2_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab2_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab2_item4 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 5 then
v_tab2_item5 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 6 then
v_tab2_item6 := r1.cd_item||v_resultado||'%';
end if;
v_tab2 := v_tab2_item1||v_tab2_item2||v_tab2_item3||v_tab2_item4||v_tab2_item5||v_tab2_item6;
elsif r1.ordem_tabela = 3 then
if r1.ordem_item = 1 then
v_tab3_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab3_item2 := r1.cd_item||v_resultado||'%';
end if;
v_tab3 := v_tab3_item1||v_tab3_item2;
elsif r1.ordem_tabela = 4 then
if r1.ordem_item = 1 then
v_tab4_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab4_item2 := r1.cd_item||v_resultado||'%';
end if;
v_tab4 := v_tab4_item1||v_tab4_item2;
elsif r1.ordem_tabela = 5 then
if r1.ordem_item = 1 then
v_tab5_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab5_item2 := r1.cd_item||v_resultado||'%';
end if;
v_tab5 := v_tab5_item1||v_tab5_item2;
elsif r1.ordem_tabela = 6 then
if r1.ordem_item = 1 then
v_tab6_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab6_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab6_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab6_item4 := r1.cd_item||v_resultado||'%';
end if;
v_tab6 := v_tab6_item1||v_tab6_item2||v_tab6_item3||v_tab6_item4;
elsif r1.ordem_tabela = 7 then
if r1.ordem_item = 1 then
v_tab7_item1 := r1.cd_item||v_resultado||'%';
end if;
v_tab7 := v_tab7_item1;
elsif r1.ordem_tabela = 8 then
if r1.ordem_item = 1 then
v_tab8_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab8_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab8_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab8_item4 := r1.cd_item||v_resultado||'%';
end if;
v_tab8 := v_tab8_item1||v_tab8_item2||v_tab8_item3||v_tab8_item4;
elsif r1.ordem_tabela = 9 then
if r1.ordem_item = 1 then
v_tab9_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab9_item2 := r1.cd_item||v_resultado||'%';
end if;
v_tab9 := v_tab9_item1||v_tab9_item2;
elsif r1.ordem_tabela = 10 then
if r1.ordem_item = 1 then
v_tab10_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab10_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab10_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab10_item4 := r1.cd_item||v_resultado||'%';
end if;
v_tab10 := v_tab10_item1||v_tab10_item2||v_tab10_item3||v_tab10_item4;
elsif r1.ordem_tabela = 11 then
if r1.ordem_item = 1 then
v_tab11_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab11_item2 := r1.cd_item||v_resultado||'%';
end if;
v_tab11 := v_tab11_item1||v_tab11_item2;
elsif r1.ordem_tabela = 12 then
if r1.ordem_item = 1 then
v_tab12_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab12_item2 := r1.cd_item||v_resultado||'%';
end if;
v_tab12 := v_tab12_item1||v_tab12_item2;
elsif r1.ordem_tabela = 13 then
if r1.ordem_item = 1 then
v_tab13_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab13_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab13_item3 := r1.cd_item||v_resultado||'%';
end if;
v_tab13 := v_tab13_item1||v_tab13_item2||v_tab13_item3;
elsif r1.ordem_tabela = 14 then
if r1.ordem_item = 1 then
v_tab14_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab14_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab14_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab14_item4 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 5 then
v_tab14_item5 := r1.cd_item||v_resultado||'%';
end if;
v_tab14 := v_tab14_item1||v_tab14_item2||v_tab14_item3||v_tab14_item4||v_tab14_item5;
elsif r1.ordem_tabela = 15 then
if r1.ordem_item = 1 then
v_tab15_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab15_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab15_item3 := r1.cd_item||v_resultado||'%';
end if;
v_tab15 := v_tab15_item1||v_tab15_item2||v_tab15_item3;
elsif r1.ordem_tabela = 16 then
if r1.ordem_item = 1 then
v_tab16_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab16_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab16_item3 := r1.cd_item||v_resultado||'%';
end if;
v_tab16 := v_tab16_item1||v_tab16_item2||v_tab16_item3;
elsif r1.ordem_tabela = 17 then
if r1.ordem_item = 1 then
v_tab17_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab17_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab17_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab17_item4 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 5 then
v_tab17_item5 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 6 then
v_tab17_item6 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 7 then
v_tab17_item7 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 11 then
v_tab17_item11 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 12 then
v_tab17_item12 := r1.cd_item||v_resultado||'%';
end if;
v_tab17 := v_tab17_item1||v_tab17_item2||v_tab17_item3||
v_tab17_item4||v_tab17_item5||v_tab17_item6||
v_tab17_item7||v_tab17_item11||v_tab17_item12;
elsif r1.ordem_tabela = 18 then
if r1.ordem_item = 1 then
v_tab18_item1 := r1.cd_item||v_resultado||'%';
end if;
v_tab18 := v_tab18_item1;
elsif r1.ordem_tabela = 19 then
if r1.ordem_item = 1 then
v_tab19_item1 := r1.cd_item||v_resultado||'%';
end if;
v_tab19 := v_tab19_item1;
elsif r1.ordem_tabela = 20 then
if r1.ordem_item = 1 then
v_tab20_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab20_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab20_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab20_item4 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 5 then
v_tab20_item5 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 6 then
v_tab20_item6 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 7 then
v_tab20_item7 := r1.cd_item||v_resultado||'%';
end if;
v_tab20 := v_tab20_item1||v_tab20_item2||v_tab20_item3||v_tab20_item4||v_tab20_item5||
v_tab20_item6||v_tab20_item7;
elsif r1.ordem_tabela = 21 then
if r1.ordem_item = 1 then
v_tab21_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab21_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab21_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab21_item4 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 5 then
v_tab21_item5 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 6 then
v_tab21_item6 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 7 then
v_tab21_item7 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 7 then
v_tab21_item8 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 7 then
v_tab21_item9 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 7 then
v_tab21_item10 := r1.cd_item||v_resultado||'%';
end if;
v_tab21 := v_tab21_item1||v_tab21_item2||v_tab21_item3||v_tab21_item4||v_tab21_item5||
v_tab21_item6||v_tab21_item7||v_tab21_item8||v_tab21_item9||v_tab21_item10;
elsif r1.ordem_tabela = 22 then
if r1.ordem_item = 1 then
v_tab22_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab22_item2 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 3 then
v_tab22_item3 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 4 then
v_tab22_item4 := r1.cd_item||v_resultado||'%';
end if;
v_tab22 := v_tab22_item1||v_tab22_item2||v_tab22_item3||v_tab22_item4;
elsif r1.ordem_tabela = 23 then
if r1.ordem_item = 1 then
v_tab23_item1 := r1.cd_item||v_resultado||'%';
elsif r1.ordem_item = 2 then
v_tab23_item2 := r1.cd_item||v_resultado||'%';
end if;
v_tab23 := v_tab23_item1||v_tab23_item2;
elsif r1.ordem_tabela = 24 then
if r1.ordem_item = 1 then
v_tab24_item1 := r1.cd_item||v_resultado||'%';
end if;
v_tab24 := v_tab24_item1;
end if;
end if;
end loop;
:parameter.fenotipo := v_tab1||v_tab2||v_tab3||v_tab4||v_tab5||v_tab6||v_tab7||v_tab8||v_tab9||v_tab10||
v_tab11||v_tab12||v_tab13||v_tab14||v_tab15||v_tab16||v_tab17||v_tab18||v_tab19||
v_tab20||v_tab21||v_tab22||v_tab23||v_tab24;
close c1;
end;
v_item := null;
v_resultado := null;
else
v_item := v_item||substr(v_fenotipo,i,1);
end if;
end loop;
end if;
END;
Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes