Re: [oracle_br] Repetir linha na consulta

2016-04-18 Por tôpico Eduardo Dornelles eod.edua...@gmail.com [oracle_br]
Bom dia Srs.

Muito obrigado pelas dicas, vou trabalhar nisso essa semana e reporto
dúvidas no decorrer do trabalho.
Mais uma vez, obrigado.


At.te,
Eduardo Dornelles.


Em 15 de abril de 2016 11:42, Ricardo Tajiri rhtaj...@gmail.com [oracle_br]
 escreveu:

>
>
> Bom dia Eduardo.
>
> Normalmente gosto de brincar mais só com SQL's sem PL quando possível.
> Segue um exemplo do que pode ser feito com connect by e transformando tudo
> em números na mesma medida (mL) pra poder fazer os cálculos corretos. É
> mais uma opção de caminho pra resolução do seu problema, além das já
> sugeridas. Espero que te dê uma luz:
>
>
> *with tabela as ( -- massa de testes*
> *select 'Produto 1' nome,'500ml' volume,'descrição' descricao from dual
> union all*
> *select 'Produto 2','1L','descrição' from dual union all*
> *select 'Produto 3','2L','descrição' from dual union all*
> *select 'Produto 4','1,5L','descrição' from dual union all*
> *select 'Produto 5','1,8L','descrição' from dual*
> *),*
> *tabela2 as (-- para transformar os volumes de L em mL*
> *select nome,volume,descricao, *
> *to_number(regexp_replace(volume,'[a-Z]',''))*case when
> instr(volume,'ml')>0 then 1 else 1000 end vol  -- converte L em ML*
> *from tabela*
> *)*
> *,tabela3 as ( -- para criar as novas linhas*
> *select nome, level lvl, max(level) over (partition by nome) maxLevel *
> *from tabela2 *
> *connect by ceil((vol/500)) - level >= 0 and nome = nome*
> *group by nome, level*
> *order by nome, level)*
> *-- consulta retornando as linhas divididas*
> *select t2.nome, t2.volume volume_original, t2.descricao,case when t3.lvl
> = t3.maxLevel then vol-(t3.lvl-1)*500 else 500 end volume_quebrado*
> *from tabela3 t3*
> *join tabela2 t2 on t2.nome = t3.nome*
> *order by t2.nome, t3.lvl;*
>
>
> *Massa de testes:*
> NOME VOLUME DESCRICAO
> Produto 1 500ml descrição
> Produto 2 1L descrição
> Produto 3 2L descrição
> Produto 4 1,5L descrição
> Produto 5 1,8L descrição
>
> *Retorno:*
> NOME VOLUME_ORIGINAL DESCRICAO VOLUME_QUEBRADO
> Produto 1 500ml descrição 500
> Produto 2 1L descrição 500
> Produto 2 1L descrição 500
> Produto 3 2L descrição 500
> Produto 3 2L descrição 500
> Produto 3 2L descrição 500
> Produto 3 2L descrição 500
> Produto 4 1,5L descrição 500
> Produto 4 1,5L descrição 500
> Produto 4 1,5L descrição 500
> Produto 5 1,8L descrição 500
> Produto 5 1,8L descrição 500
> Produto 5 1,8L descrição 500
> Produto 5 1,8L descrição 300
>
>
> Att.
>
> Ricardo Hideyuki Tajiri
>
> Em 13 de abril de 2016 13:07, Fabio Prado fbifa...@gmail.com [oracle_br] <
> oracle_br@yahoogrupos.com.br> escreveu:
>
>>
>>
>> Eduardo, tente resolver o seu problema com PTF:
>> http://www.fabioprado.net/2010/12/pipelined-table-functions-funcao-para.html
>> .
>>
>> []s
>>
>> *Fábio Prado*
>> 
>> www.fabioprado.net
>> "Compartilhando conhecimentos e treinando profissionais em Bancos de
>> Dados Oracle"
>>
>>
>> Em 13 de abril de 2016 10:07, Eduardo Dornelles eod.edua...@gmail.com
>> [oracle_br]  escreveu:
>>
>>>
>>>
>>> Bom dia.
>>>
>>> Preciso de uma solução para mostrar um registro mais de uma vez no
>>> retorno de um relatório, em uma situação específica.
>>>
>>> Na seguinte situação: Um produto quando solicitado em volume maior que
>>> 500ml, deve retornar uma linha para cada 500ml, exemplo:
>>>
>>>
>>>
>>> Produto 1500ml descrição
>>> Produto 21L  descrição
>>> Produto 32L  descrição
>>>
>>>
>>> Deve retornar o seguinte:
>>>
>>> produto 1 500ml descrição
>>> produto 2 500ml descrição
>>> produto 2 500ml descrição
>>> produto 3 500ml descrição
>>> produto 3 500ml descrição
>>> produto 3 500ml descrição
>>> produto 3 500ml descrição
>>>
>>>
>>> Ou seja, preciso conseguir repetir uma linha uma ou mais vezes, em uma
>>> determinada condição.
>>>
>>> Alguém tem alguma ideia pra resolver isso?
>>> Muito obrigado.
>>>
>>>
>>> At.te,
>>> Eduardo Dornelles
>>>
>>>
>>
> 
>


Re: [oracle_br] Repetir linha na consulta

2016-04-15 Por tôpico Ricardo Tajiri rhtaj...@gmail.com [oracle_br]
Bom dia Eduardo.

Normalmente gosto de brincar mais só com SQL's sem PL quando possível.
Segue um exemplo do que pode ser feito com connect by e transformando tudo
em números na mesma medida (mL) pra poder fazer os cálculos corretos. É
mais uma opção de caminho pra resolução do seu problema, além das já
sugeridas. Espero que te dê uma luz:


*with tabela as ( -- massa de testes*
*select 'Produto 1' nome,'500ml' volume,'descrição' descricao from dual
union all*
*select 'Produto 2','1L','descrição' from dual union all*
*select 'Produto 3','2L','descrição' from dual union all*
*select 'Produto 4','1,5L','descrição' from dual union all*
*select 'Produto 5','1,8L','descrição' from dual*
*),*
*tabela2 as (-- para transformar os volumes de L em mL*
*select nome,volume,descricao, *
*to_number(regexp_replace(volume,'[a-Z]',''))*case when
instr(volume,'ml')>0 then 1 else 1000 end vol  -- converte L em ML*
*from tabela*
*)*
*,tabela3 as ( -- para criar as novas linhas*
*select nome, level lvl, max(level) over (partition by nome) maxLevel *
*from tabela2 *
*connect by ceil((vol/500)) - level >= 0 and nome = nome*
*group by nome, level*
*order by nome, level)*
*-- consulta retornando as linhas divididas*
*select t2.nome, t2.volume volume_original, t2.descricao,case when t3.lvl =
t3.maxLevel then vol-(t3.lvl-1)*500 else 500 end volume_quebrado*
*from tabela3 t3*
*join tabela2 t2 on t2.nome = t3.nome*
*order by t2.nome, t3.lvl;*


*Massa de testes:*
NOME VOLUME DESCRICAO
Produto 1 500ml descrição
Produto 2 1L descrição
Produto 3 2L descrição
Produto 4 1,5L descrição
Produto 5 1,8L descrição

*Retorno:*
NOME VOLUME_ORIGINAL DESCRICAO VOLUME_QUEBRADO
Produto 1 500ml descrição 500
Produto 2 1L descrição 500
Produto 2 1L descrição 500
Produto 3 2L descrição 500
Produto 3 2L descrição 500
Produto 3 2L descrição 500
Produto 3 2L descrição 500
Produto 4 1,5L descrição 500
Produto 4 1,5L descrição 500
Produto 4 1,5L descrição 500
Produto 5 1,8L descrição 500
Produto 5 1,8L descrição 500
Produto 5 1,8L descrição 500
Produto 5 1,8L descrição 300


Att.

Ricardo Hideyuki Tajiri

Em 13 de abril de 2016 13:07, Fabio Prado fbifa...@gmail.com [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Eduardo, tente resolver o seu problema com PTF:
> http://www.fabioprado.net/2010/12/pipelined-table-functions-funcao-para.html
> .
>
> []s
>
> *Fábio Prado*
> 
> www.fabioprado.net
> "Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
> Oracle"
>
>
> Em 13 de abril de 2016 10:07, Eduardo Dornelles eod.edua...@gmail.com
> [oracle_br]  escreveu:
>
>>
>>
>> Bom dia.
>>
>> Preciso de uma solução para mostrar um registro mais de uma vez no
>> retorno de um relatório, em uma situação específica.
>>
>> Na seguinte situação: Um produto quando solicitado em volume maior que
>> 500ml, deve retornar uma linha para cada 500ml, exemplo:
>>
>>
>>
>> Produto 1500ml descrição
>> Produto 21L  descrição
>> Produto 32L  descrição
>>
>>
>> Deve retornar o seguinte:
>>
>> produto 1 500ml descrição
>> produto 2 500ml descrição
>> produto 2 500ml descrição
>> produto 3 500ml descrição
>> produto 3 500ml descrição
>> produto 3 500ml descrição
>> produto 3 500ml descrição
>>
>>
>> Ou seja, preciso conseguir repetir uma linha uma ou mais vezes, em uma
>> determinada condição.
>>
>> Alguém tem alguma ideia pra resolver isso?
>> Muito obrigado.
>>
>>
>> At.te,
>> Eduardo Dornelles
>>
>>
> 
>


Re: [oracle_br] Repetir linha na consulta

2016-04-13 Por tôpico Fabio Prado fbifa...@gmail.com [oracle_br]
Eduardo, tente resolver o seu problema com PTF:
http://www.fabioprado.net/2010/12/pipelined-table-functions-funcao-para.html
.

[]s

*Fábio Prado*

www.fabioprado.net
"Compartilhando conhecimentos e treinando profissionais em Bancos de Dados
Oracle"


Em 13 de abril de 2016 10:07, Eduardo Dornelles eod.edua...@gmail.com
[oracle_br]  escreveu:

>
>
> Bom dia.
>
> Preciso de uma solução para mostrar um registro mais de uma vez no retorno
> de um relatório, em uma situação específica.
>
> Na seguinte situação: Um produto quando solicitado em volume maior que
> 500ml, deve retornar uma linha para cada 500ml, exemplo:
>
>
>
> Produto 1500ml descrição
> Produto 21L  descrição
> Produto 32L  descrição
>
>
> Deve retornar o seguinte:
>
> produto 1 500ml descrição
> produto 2 500ml descrição
> produto 2 500ml descrição
> produto 3 500ml descrição
> produto 3 500ml descrição
> produto 3 500ml descrição
> produto 3 500ml descrição
>
>
> Ou seja, preciso conseguir repetir uma linha uma ou mais vezes, em uma
> determinada condição.
>
> Alguém tem alguma ideia pra resolver isso?
> Muito obrigado.
>
>
> At.te,
> Eduardo Dornelles
>
> 
>


Re: [oracle_br] Repetir linha na consulta

2016-04-13 Por tôpico Alessandro Lúcio Cordeiro da Silva alecordeirosi...@yahoo.com.br [oracle_br]
 Eu acho que é um caso muito especifico.
Por isso acredito que o Melhor é você criar uma função pipelined, que permite 
retornar um resultSet. Dê uma procurada no Google que você encontra vários 
exemplos

  Alessandro Lúcio Cordeiro da Silva Analista de Sistema
þ http://alecordeirosilva.blogspot.com/
Porque esta é a vontade de Deus, a saber, a vossa 
santificação: que vos abstenhais da prostituição.
(1º Tessalonicenses 4:3)
 

Em Quarta-feira, 13 de Abril de 2016 9:07, "Eduardo Dornelles 
eod.edua...@gmail.com [oracle_br]"  escreveu:
 

     Bom dia.
Preciso de uma solução para mostrar um registro mais de uma vez no retorno de 
um relatório, em uma situação específica.
Na seguinte situação: Um produto quando solicitado em volume maior que 500ml, 
deve retornar uma linha para cada 500ml, exemplo:





Produto 1        500ml             descriçãoProduto 2        1L                 
 descriçãoProduto 3        2L                  descrição

Deve retornar o seguinte:
produto 1         500ml             descriçãoproduto 2         500ml            
 descriçãoproduto 2         500ml             descrição
produto 3         500ml             descrição
produto 3         500ml             descrição
produto 3         500ml             descrição
produto 3         500ml             descrição


Ou seja, preciso conseguir repetir uma linha uma ou mais vezes, em uma 
determinada condição.
Alguém tem alguma ideia pra resolver isso?Muito obrigado.

At.te,Eduardo Dornelles  #yiv8716162210 #yiv8716162210 -- 
#yiv8716162210ygrp-mkp {border:1px solid #d8d8d8;font-family:Arial;margin:10px 
0;padding:0 10px;}#yiv8716162210 #yiv8716162210ygrp-mkp hr {border:1px solid 
#d8d8d8;}#yiv8716162210 #yiv8716162210ygrp-mkp #yiv8716162210hd 
{color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px 
0;}#yiv8716162210 #yiv8716162210ygrp-mkp #yiv8716162210ads 
{margin-bottom:10px;}#yiv8716162210 #yiv8716162210ygrp-mkp .yiv8716162210ad 
{padding:0 0;}#yiv8716162210 #yiv8716162210ygrp-mkp .yiv8716162210ad p 
{margin:0;}#yiv8716162210 #yiv8716162210ygrp-mkp .yiv8716162210ad a 
{color:#ff;text-decoration:none;}#yiv8716162210 #yiv8716162210ygrp-sponsor 
#yiv8716162210ygrp-lc {font-family:Arial;}#yiv8716162210 
#yiv8716162210ygrp-sponsor #yiv8716162210ygrp-lc #yiv8716162210hd {margin:10px 
0px;font-weight:700;font-size:78%;line-height:122%;}#yiv8716162210 
#yiv8716162210ygrp-sponsor #yiv8716162210ygrp-lc .yiv8716162210ad 
{margin-bottom:10px;padding:0 0;}#yiv8716162210 #yiv8716162210actions 
{font-family:Verdana;font-size:11px;padding:10px 0;}#yiv8716162210 
#yiv8716162210activity 
{background-color:#e0ecee;float:left;font-family:Verdana;font-size:10px;padding:10px;}#yiv8716162210
 #yiv8716162210activity span {font-weight:700;}#yiv8716162210 
#yiv8716162210activity span:first-child 
{text-transform:uppercase;}#yiv8716162210 #yiv8716162210activity span a 
{color:#5085b6;text-decoration:none;}#yiv8716162210 #yiv8716162210activity span 
span {color:#ff7900;}#yiv8716162210 #yiv8716162210activity span 
.yiv8716162210underline {text-decoration:underline;}#yiv8716162210 
.yiv8716162210attach 
{clear:both;display:table;font-family:Arial;font-size:12px;padding:10px 
0;width:400px;}#yiv8716162210 .yiv8716162210attach div a 
{text-decoration:none;}#yiv8716162210 .yiv8716162210attach img 
{border:none;padding-right:5px;}#yiv8716162210 .yiv8716162210attach label 
{display:block;margin-bottom:5px;}#yiv8716162210 .yiv8716162210attach label a 
{text-decoration:none;}#yiv8716162210 blockquote {margin:0 0 0 
4px;}#yiv8716162210 .yiv8716162210bold 
{font-family:Arial;font-size:13px;font-weight:700;}#yiv8716162210 
.yiv8716162210bold a {text-decoration:none;}#yiv8716162210 dd.yiv8716162210last 
p a {font-family:Verdana;font-weight:700;}#yiv8716162210 dd.yiv8716162210last p 
span {margin-right:10px;font-family:Verdana;font-weight:700;}#yiv8716162210 
dd.yiv8716162210last p span.yiv8716162210yshortcuts 
{margin-right:0;}#yiv8716162210 div.yiv8716162210attach-table div div a 
{text-decoration:none;}#yiv8716162210 div.yiv8716162210attach-table 
{width:400px;}#yiv8716162210 div.yiv8716162210file-title a, #yiv8716162210 
div.yiv8716162210file-title a:active, #yiv8716162210 
div.yiv8716162210file-title a:hover, #yiv8716162210 div.yiv8716162210file-title 
a:visited {text-decoration:none;}#yiv8716162210 div.yiv8716162210photo-title a, 
#yiv8716162210 div.yiv8716162210photo-title a:active, #yiv8716162210 
div.yiv8716162210photo-title a:hover, #yiv8716162210 
div.yiv8716162210photo-title a:visited {text-decoration:none;}#yiv8716162210 
div#yiv8716162210ygrp-mlmsg #yiv8716162210ygrp-msg p a 
span.yiv8716162210yshortcuts 
{font-family:Verdana;font-size:10px;font-weight:normal;}#yiv8716162210 
.yiv8716162210green {color:#628c2a;}#yiv8716162210 .yiv8716162210MsoNormal 
{margin:0 0 0 0;}#yiv8716162210 o {font-size:0;}#yiv8716162210 
#yiv8716162210photos div {float:left;width:72px;}#yiv8716162210 
#yiv8716162210photos div div {border:1px solid 
#66;h

[oracle_br] Repetir linha na consulta

2016-04-13 Por tôpico Eduardo Dornelles eod.edua...@gmail.com [oracle_br]
Bom dia.

Preciso de uma solução para mostrar um registro mais de uma vez no retorno
de um relatório, em uma situação específica.

Na seguinte situação: Um produto quando solicitado em volume maior que
500ml, deve retornar uma linha para cada 500ml, exemplo:



Produto 1500ml descrição
Produto 21L  descrição
Produto 32L  descrição


Deve retornar o seguinte:

produto 1 500ml descrição
produto 2 500ml descrição
produto 2 500ml descrição
produto 3 500ml descrição
produto 3 500ml descrição
produto 3 500ml descrição
produto 3 500ml descrição


Ou seja, preciso conseguir repetir uma linha uma ou mais vezes, em uma
determinada condição.

Alguém tem alguma ideia pra resolver isso?
Muito obrigado.


At.te,
Eduardo Dornelles