Re: [oracle_br] Desafio SQL
Miltão Blz... :) Ainda bem que já criaram um ferramental para tratar isso, né? Na minha humilde opinião, misturaram 2 coisas: tabela de domínio X codificação considerando vetor de bits. Deveriam usar uma coisa ou outra. [ ] André Santos Em 27 de maio de 2014 13:19, 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br] escreveu: > > > Beleza André! > > Cara, depois da sugestão do Gaudêncio eu fui vasculhar nas funções > existentes na nossa base, e achei a função pronta! > > Já tá pronta e funcionando... outro cara da minha empresa já tinha feito > (só que ele não me respondeu antes porque tá viajando). > > Obrigado! > > > Em 27 de maio de 2014 13:11, Andre Santos > andre.psantos...@gmail.com[oracle_br] > escreveu: > > >> >> Miltão >> >> Fizeram uma implementação tratando os códigos como posições de "bits" >> (imaginemos que dentro de um "byte"). >> 0001 [bin] = 1 [dec] --> "Produto vencido" >> 0010 [bin] = 2 [dec] --> "Produto bloqueado manualmente" >> 0100 [bin] = 4 [dec] --> "Produto bloqueado para inventário" >> 1000 [bin] = 8 [dec] --> "Produto bloqueado por avaria" >> >> Para conseguir decodificar, pode usar a função BITAND, que faz uma >> operação "AND" binária nos valores. >> >> Estou meio na correria agora... mas depois poderia tentar montar um >> exemplo. >> Talvez algum exemplol na documentação do Oracle já seja útil para seu >> caso. >> >> [ ] >> >> André Santos >> >> >> >> Em 27 de maio de 2014 12:13, Emerson dos Santos Gaudêncio >> emerson.fen...@gmail.com [oracle_br] escreveu: >> >>> >>> >>> Milton é possível fazendo um case na query com as variações ou >>> utilizando uma função que retorne as decrições conforme a situação: >>> >>> Exemplo 1: >>> >>> create or replace view vw_produto_situacao as >>> select id_produto, descricao_produto, situacao, >>> case when >>> situacao = 1 >>> then >>> 'Produto vencido' >>> when >>> situacao = 2 >>> then >>> 'Produto bloqueado manualmente' >>> when >>> situacao = 3 >>> then >>> 'Produto vencido/Produto bloqueado manualmente' >>> when >>> situacao = 4 >>> then >>> 'Produto bloqueado para inventário' >>> when >>> situacao = 5 >>> then >>> 'Produto vencido/Produto bloqueado para inventário' >>> when >>> else >>> 'Produto sem situacao informada' >>> end descricao_situacao >>> from tbproduto; >>> >>> >>> Exemplo 2: >>> >>> create or replace view vw_produto_situacao as >>> select id_produto, descricao_produto, situacao, >>> fnc_get_descricao_situacao(situacao) as descricao_situacao >>> from tbproduto; >>> >>> >>> Bom acredito que podem existir outras formas , mais ambas poderiam lhe >>> ajudar. >>> >>> Att, >>> Emerson >>> >>> >>> Em 27 de maio de 2014 10:51, 'Milton Bastos Henriquis Jr.' >>> miltonbas...@gmail.com [oracle_br] escreveu: >>> >>> Bom dia amigos! Tenho um probleminha aqui e não sei se existe solução usando SQL. Caso alguém consiga resolver, agradeço muito! Duas tabelas. Primeira tabela: SITUACAO A tabela "Situação" tem um campo ID e um campo "Descrição". O campo ID é sempre potência de 2: ID Descrição 1Produto vencido 2Produto bloqueado manualmente 4Produto bloqueado para inventário 8Produto bloqueado por avaria Inventei essas descrições acima pra ilustrar o exemplo. Numa outra tabela, tabela ESTOQUE, eu tenho um campo de Situação. Exemplo: ID Produto Situação 1 Cerveja2 2 Picanha 5 3 Alcatra 9 4 Maminha 7 O campo situação mostra a soma de todos os tipos. A picanha está com situação 5 (4 + 1), ou seja, o produto está Vencido e também está bloqueado para inventário. Bom, tudo isso já está implementado e funcionando. A minha dúvida vem abaixo Eu quero criar uma VIEW que mostre num campo SITUAÇÃO todos os bloqueios desse item do estoque concatenados. Isso é possível? Ficaria assim: 1 Cerveja 2 Produto bloqueado manualmente 2 Picanha 5 Produto vencido|Produto bloqueado para inventário 3 Alcatra 9 Produto vencido|Produto bloqueado por avaria 4 Maminha 7 Produto vencido|Produto bloqueado manualmente|Produto bloqueado para inventário É possível fazer isso apenas com uma query para criar uma View? >>> >> > >
Re: [oracle_br] Desafio SQL
Beleza André! Cara, depois da sugestão do Gaudêncio eu fui vasculhar nas funções existentes na nossa base, e achei a função pronta! Já tá pronta e funcionando... outro cara da minha empresa já tinha feito (só que ele não me respondeu antes porque tá viajando). Obrigado! Em 27 de maio de 2014 13:11, Andre Santos andre.psantos...@gmail.com[oracle_br] escreveu: > > > Miltão > > Fizeram uma implementação tratando os códigos como posições de "bits" > (imaginemos que dentro de um "byte"). > 0001 [bin] = 1 [dec] --> "Produto vencido" > 0010 [bin] = 2 [dec] --> "Produto bloqueado manualmente" > 0100 [bin] = 4 [dec] --> "Produto bloqueado para inventário" > 1000 [bin] = 8 [dec] --> "Produto bloqueado por avaria" > > Para conseguir decodificar, pode usar a função BITAND, que faz uma > operação "AND" binária nos valores. > > Estou meio na correria agora... mas depois poderia tentar montar um > exemplo. > Talvez algum exemplol na documentação do Oracle já seja útil para seu caso. > > [ ] > > André Santos > > > > Em 27 de maio de 2014 12:13, Emerson dos Santos Gaudêncio > emerson.fen...@gmail.com [oracle_br] escreveu: > >> >> >> Milton é possível fazendo um case na query com as variações ou utilizando >> uma função que retorne as decrições conforme a situação: >> >> Exemplo 1: >> >> create or replace view vw_produto_situacao as >> select id_produto, descricao_produto, situacao, >> case when >> situacao = 1 >> then >> 'Produto vencido' >> when >> situacao = 2 >> then >> 'Produto bloqueado manualmente' >> when >> situacao = 3 >> then >> 'Produto vencido/Produto bloqueado manualmente' >> when >> situacao = 4 >> then >> 'Produto bloqueado para inventário' >> when >> situacao = 5 >> then >> 'Produto vencido/Produto bloqueado para inventário' >> when >> else >> 'Produto sem situacao informada' >> end descricao_situacao >> from tbproduto; >> >> >> Exemplo 2: >> >> create or replace view vw_produto_situacao as >> select id_produto, descricao_produto, situacao, >> fnc_get_descricao_situacao(situacao) as descricao_situacao >> from tbproduto; >> >> >> Bom acredito que podem existir outras formas , mais ambas poderiam lhe >> ajudar. >> >> Att, >> Emerson >> >> >> Em 27 de maio de 2014 10:51, 'Milton Bastos Henriquis Jr.' >> miltonbas...@gmail.com [oracle_br] escreveu: >> >> >>> >>> Bom dia amigos! >>> >>> Tenho um probleminha aqui e não sei se existe solução usando SQL. >>> Caso alguém consiga resolver, agradeço muito! >>> >>> Duas tabelas. >>> >>> Primeira tabela: SITUACAO >>> A tabela "Situação" tem um campo ID e um campo "Descrição". >>> O campo ID é sempre potência de 2: >>> >>> ID Descrição >>> 1Produto vencido >>> 2Produto bloqueado manualmente >>> 4Produto bloqueado para inventário >>> 8Produto bloqueado por avaria >>> >>> Inventei essas descrições acima pra ilustrar o exemplo. >>> >>> Numa outra tabela, tabela ESTOQUE, eu tenho um campo >>> de Situação. Exemplo: >>> >>> ID Produto Situação >>> 1 Cerveja2 >>> 2 Picanha 5 >>> 3 Alcatra 9 >>> 4 Maminha 7 >>> >>> O campo situação mostra a soma de todos os tipos. >>> A picanha está com situação 5 (4 + 1), ou seja, o produto está Vencido e >>> também está bloqueado para inventário. >>> >>> >>> Bom, tudo isso já está implementado e funcionando. >>> >>> A minha dúvida vem abaixo >>> >>> Eu quero criar uma VIEW que mostre num campo SITUAÇÃO todos os >>> bloqueios desse item do estoque concatenados. >>> >>> Isso é possível? >>> >>> Ficaria assim: >>> >>> 1 Cerveja 2 Produto bloqueado manualmente >>> 2 Picanha 5 Produto vencido|Produto bloqueado para inventário >>> 3 Alcatra 9 Produto vencido|Produto bloqueado por avaria >>> 4 Maminha 7 Produto vencido|Produto bloqueado manualmente|Produto >>> bloqueado para inventário >>> >>> >>> É possível fazer isso apenas com uma query para criar uma View? >>> >>> >>> >> > >
Re: [oracle_br] Desafio SQL
Miltão Fizeram uma implementação tratando os códigos como posições de "bits" (imaginemos que dentro de um "byte"). 0001 [bin] = 1 [dec] --> "Produto vencido" 0010 [bin] = 2 [dec] --> "Produto bloqueado manualmente" 0100 [bin] = 4 [dec] --> "Produto bloqueado para inventário" 1000 [bin] = 8 [dec] --> "Produto bloqueado por avaria" Para conseguir decodificar, pode usar a função BITAND, que faz uma operação "AND" binária nos valores. Estou meio na correria agora... mas depois poderia tentar montar um exemplo. Talvez algum exemplol na documentação do Oracle já seja útil para seu caso. [ ] André Santos Em 27 de maio de 2014 12:13, Emerson dos Santos Gaudêncio emerson.fen...@gmail.com [oracle_br] escreveu: > > > Milton é possível fazendo um case na query com as variações ou utilizando > uma função que retorne as decrições conforme a situação: > > Exemplo 1: > > create or replace view vw_produto_situacao as > select id_produto, descricao_produto, situacao, > case when > situacao = 1 > then > 'Produto vencido' > when > situacao = 2 > then > 'Produto bloqueado manualmente' > when > situacao = 3 > then > 'Produto vencido/Produto bloqueado manualmente' > when > situacao = 4 > then > 'Produto bloqueado para inventário' > when > situacao = 5 > then > 'Produto vencido/Produto bloqueado para inventário' > when > else > 'Produto sem situacao informada' > end descricao_situacao > from tbproduto; > > > Exemplo 2: > > create or replace view vw_produto_situacao as > select id_produto, descricao_produto, situacao, > fnc_get_descricao_situacao(situacao) as descricao_situacao > from tbproduto; > > > Bom acredito que podem existir outras formas , mais ambas poderiam lhe > ajudar. > > Att, > Emerson > > > Em 27 de maio de 2014 10:51, 'Milton Bastos Henriquis Jr.' > miltonbas...@gmail.com [oracle_br] escreveu: > > >> >> Bom dia amigos! >> >> Tenho um probleminha aqui e não sei se existe solução usando SQL. >> Caso alguém consiga resolver, agradeço muito! >> >> Duas tabelas. >> >> Primeira tabela: SITUACAO >> A tabela "Situação" tem um campo ID e um campo "Descrição". >> O campo ID é sempre potência de 2: >> >> ID Descrição >> 1Produto vencido >> 2Produto bloqueado manualmente >> 4Produto bloqueado para inventário >> 8Produto bloqueado por avaria >> >> Inventei essas descrições acima pra ilustrar o exemplo. >> >> Numa outra tabela, tabela ESTOQUE, eu tenho um campo >> de Situação. Exemplo: >> >> ID Produto Situação >> 1 Cerveja2 >> 2 Picanha 5 >> 3 Alcatra 9 >> 4 Maminha 7 >> >> O campo situação mostra a soma de todos os tipos. >> A picanha está com situação 5 (4 + 1), ou seja, o produto está Vencido e >> também está bloqueado para inventário. >> >> >> Bom, tudo isso já está implementado e funcionando. >> >> A minha dúvida vem abaixo >> >> Eu quero criar uma VIEW que mostre num campo SITUAÇÃO todos os >> bloqueios desse item do estoque concatenados. >> >> Isso é possível? >> >> Ficaria assim: >> >> 1 Cerveja 2 Produto bloqueado manualmente >> 2 Picanha 5 Produto vencido|Produto bloqueado para inventário >> 3 Alcatra 9 Produto vencido|Produto bloqueado por avaria >> 4 Maminha 7 Produto vencido|Produto bloqueado manualmente|Produto >> bloqueado para inventário >> >> >> É possível fazer isso apenas com uma query para criar uma View? >> >> >> > >
Re: [oracle_br] Desafio SQL
Fala Gaudencio! O exemplo 1 é inviável... posso passar de milhares de possibilidades facilmente! A idéia é deixar automático, e não escrever todas as possibildades manualmente A função realmente parece uma saída interessante! Vou ver se consigo escrevê-la. Em 27 de maio de 2014 12:13, Emerson dos Santos Gaudêncio emerson.fen...@gmail.com [oracle_br] escreveu: > > > Milton é possível fazendo um case na query com as variações ou utilizando > uma função que retorne as decrições conforme a situação: > > Exemplo 1: > > create or replace view vw_produto_situacao as > select id_produto, descricao_produto, situacao, > case when > situacao = 1 > then > 'Produto vencido' > when > situacao = 2 > then > 'Produto bloqueado manualmente' > when > situacao = 3 > then > 'Produto vencido/Produto bloqueado manualmente' > when > situacao = 4 > then > 'Produto bloqueado para inventário' > when > situacao = 5 > then > 'Produto vencido/Produto bloqueado para inventário' > when > else > 'Produto sem situacao informada' > end descricao_situacao > from tbproduto; > > > Exemplo 2: > > create or replace view vw_produto_situacao as > select id_produto, descricao_produto, situacao, > fnc_get_descricao_situacao(situacao) as descricao_situacao > from tbproduto; > > > Bom acredito que podem existir outras formas , mais ambas poderiam lhe > ajudar. > > Att, > Emerson > > > Em 27 de maio de 2014 10:51, 'Milton Bastos Henriquis Jr.' > miltonbas...@gmail.com [oracle_br] escreveu: > > >> >> Bom dia amigos! >> >> Tenho um probleminha aqui e não sei se existe solução usando SQL. >> Caso alguém consiga resolver, agradeço muito! >> >> Duas tabelas. >> >> Primeira tabela: SITUACAO >> A tabela "Situação" tem um campo ID e um campo "Descrição". >> O campo ID é sempre potência de 2: >> >> ID Descrição >> 1Produto vencido >> 2Produto bloqueado manualmente >> 4Produto bloqueado para inventário >> 8Produto bloqueado por avaria >> >> Inventei essas descrições acima pra ilustrar o exemplo. >> >> Numa outra tabela, tabela ESTOQUE, eu tenho um campo >> de Situação. Exemplo: >> >> ID Produto Situação >> 1 Cerveja2 >> 2 Picanha 5 >> 3 Alcatra 9 >> 4 Maminha 7 >> >> O campo situação mostra a soma de todos os tipos. >> A picanha está com situação 5 (4 + 1), ou seja, o produto está Vencido e >> também está bloqueado para inventário. >> >> >> Bom, tudo isso já está implementado e funcionando. >> >> A minha dúvida vem abaixo >> >> Eu quero criar uma VIEW que mostre num campo SITUAÇÃO todos os >> bloqueios desse item do estoque concatenados. >> >> Isso é possível? >> >> Ficaria assim: >> >> 1 Cerveja 2 Produto bloqueado manualmente >> 2 Picanha 5 Produto vencido|Produto bloqueado para inventário >> 3 Alcatra 9 Produto vencido|Produto bloqueado por avaria >> 4 Maminha 7 Produto vencido|Produto bloqueado manualmente|Produto >> bloqueado para inventário >> >> >> É possível fazer isso apenas com uma query para criar uma View? >> >> >> > >
Re: [oracle_br] Desafio SQL
Milton é possível fazendo um case na query com as variações ou utilizando uma função que retorne as decrições conforme a situação: Exemplo 1: create or replace view vw_produto_situacao as select id_produto, descricao_produto, situacao, case when situacao = 1 then 'Produto vencido' when situacao = 2 then 'Produto bloqueado manualmente' when situacao = 3 then 'Produto vencido/Produto bloqueado manualmente' when situacao = 4 then 'Produto bloqueado para inventário' when situacao = 5 then 'Produto vencido/Produto bloqueado para inventário' when else 'Produto sem situacao informada' end descricao_situacao from tbproduto; Exemplo 2: create or replace view vw_produto_situacao as select id_produto, descricao_produto, situacao, fnc_get_descricao_situacao(situacao) as descricao_situacao from tbproduto; Bom acredito que podem existir outras formas , mais ambas poderiam lhe ajudar. Att, Emerson Em 27 de maio de 2014 10:51, 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br] escreveu: > > > Bom dia amigos! > > Tenho um probleminha aqui e não sei se existe solução usando SQL. > Caso alguém consiga resolver, agradeço muito! > > Duas tabelas. > > Primeira tabela: SITUACAO > A tabela "Situação" tem um campo ID e um campo "Descrição". > O campo ID é sempre potência de 2: > > ID Descrição > 1Produto vencido > 2Produto bloqueado manualmente > 4Produto bloqueado para inventário > 8Produto bloqueado por avaria > > Inventei essas descrições acima pra ilustrar o exemplo. > > Numa outra tabela, tabela ESTOQUE, eu tenho um campo > de Situação. Exemplo: > > ID Produto Situação > 1 Cerveja2 > 2 Picanha 5 > 3 Alcatra 9 > 4 Maminha 7 > > O campo situação mostra a soma de todos os tipos. > A picanha está com situação 5 (4 + 1), ou seja, o produto está Vencido e > também está bloqueado para inventário. > > > Bom, tudo isso já está implementado e funcionando. > > A minha dúvida vem abaixo > > Eu quero criar uma VIEW que mostre num campo SITUAÇÃO todos os > bloqueios desse item do estoque concatenados. > > Isso é possível? > > Ficaria assim: > > 1 Cerveja 2 Produto bloqueado manualmente > 2 Picanha 5 Produto vencido|Produto bloqueado para inventário > 3 Alcatra 9 Produto vencido|Produto bloqueado por avaria > 4 Maminha 7 Produto vencido|Produto bloqueado manualmente|Produto > bloqueado para inventário > > > É possível fazer isso apenas com uma query para criar uma View? > > > >
[oracle_br] Desafio SQL
Bom dia amigos! Tenho um probleminha aqui e não sei se existe solução usando SQL. Caso alguém consiga resolver, agradeço muito! Duas tabelas. Primeira tabela: SITUACAO A tabela "Situação" tem um campo ID e um campo "Descrição". O campo ID é sempre potência de 2: ID Descrição 1Produto vencido 2Produto bloqueado manualmente 4Produto bloqueado para inventário 8Produto bloqueado por avaria Inventei essas descrições acima pra ilustrar o exemplo. Numa outra tabela, tabela ESTOQUE, eu tenho um campo de Situação. Exemplo: ID Produto Situação 1 Cerveja2 2 Picanha 5 3 Alcatra 9 4 Maminha 7 O campo situação mostra a soma de todos os tipos. A picanha está com situação 5 (4 + 1), ou seja, o produto está Vencido e também está bloqueado para inventário. Bom, tudo isso já está implementado e funcionando. A minha dúvida vem abaixo Eu quero criar uma VIEW que mostre num campo SITUAÇÃO todos os bloqueios desse item do estoque concatenados. Isso é possível? Ficaria assim: 1 Cerveja 2 Produto bloqueado manualmente 2 Picanha 5 Produto vencido|Produto bloqueado para inventário 3 Alcatra 9 Produto vencido|Produto bloqueado por avaria 4 Maminha 7 Produto vencido|Produto bloqueado manualmente|Produto bloqueado para inventário É possível fazer isso apenas com uma query para criar uma View?