Re: [oracle_br] Dias úteis.
Marcio, obrigado pela ajuda, não havia realmente pensado nisso. Atenciosamente. Augusto Cesar R. Costa - Original Message - From: Marcio Portes To: oracle_br@yahoogrupos.com.br Sent: Thursday, July 06, 2006 1:00 AM Subject: Re: [oracle_br] Dias úteis. connect by level não dá pra usar com a versão 8i, só 9i em diante. Na 8i eu usava muito a all_objects porque me dá linha suficiente para a base, mas voce pode criar sua própria view de base com linhas suficientes e usar a vontade. Fica mais ou menos assim em 8i [EMAIL PROTECTED]> variable start_date varchar2(20) [EMAIL PROTECTED]> variable end_date varchar2(20) [EMAIL PROTECTED]> exec :start_date := '10/10/2005' PL/SQL procedure successfully completed. START_DATE 10/10/2005 [EMAIL PROTECTED]> exec :end_date := '20/10/2005' PL/SQL procedure successfully completed. END_DATE 20/10/2005 [EMAIL PROTECTED]> [EMAIL PROTECTED]> [EMAIL PROTECTED]> select dt, to_char(dt,'Day') Week 2from ( 3 select to_date(:start_date,'dd/mm/')+rownum-1 dt 4from all_objects 5 where rownum <= 6 to_date(:end_date,'dd/mm/')-to_date(:start_date,'dd/mm/')+1 7) 8 where to_char(dt, 'd') not in (7,1) 9 / DT WEEK --- - 10/10/2005 00:00:00 Monday 11/10/2005 00:00:00 Tuesday 12/10/2005 00:00:00 Wednesday 13/10/2005 00:00:00 Thursday 14/10/2005 00:00:00 Friday 17/10/2005 00:00:00 Monday 18/10/2005 00:00:00 Tuesday 19/10/2005 00:00:00 Wednesday 20/10/2005 00:00:00 Thursday 9 rows selected. On 7/5/06, Augusto Cesar R. Costa <[EMAIL PROTECTED]> wrote: > > >Pessoal, bom dia. > Estou precisando de uma forma de retornar quais os dias da semana, excluindo os finais de semana, num determinado intervalo informado. > Procurando nas mensagens antigas do grupo achei uma mensagem do nosso amigo Marcio Portes que funciona no Oracle9i, mas precisaria de alguma solução que pudesse ser utilizada na versão 8.1.6. > http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/msg03672.html > > Tentei adaptar para Oracle8i, executei no Oracle9i para ver se o retorno era o desejado e deu certo:: > > SQL> select * from v$version; > > BANNER > > Oracle9i Edition Release 9.2.0.7.0 - Production > PL/SQL Release 9.2.0.7.0 - Production > CORE 9.2.0.7.0 Production > > TNS for 32-bit Windows: Version 9.2.0.7.0 - Production > NLSRTL Version 9.2.0.7.0 - Production > > SQL> > SQL> select data.dt, to_char(dt,'day') >2from (select to_date(sysdate + 1,'dd/mm/')+level-1 dt >3from dual >4connect by level <= to_date(sysdate + 10,'dd/mm/')-to_date(sysdate,'dd/mm/')+1) data >5 where to_char(data.dt,'d') not in (1,7); > > DT TO_CHAR(DT,'DAY') > --- - > 06/07/2006 thursday > 07/07/2006 friday > 10/07/2006 monday > 11/07/2006 tuesday > 12/07/2006 wednesday > 13/07/2006 thursday > 14/07/2006 friday > > 7 rows selected > > SQL> > > > Contudo, quando executo no Oracle 8i que tenho aqui também, obtenho o erro: > > > SQL> select * from v$version; > > BANNER > > Oracle8i Edition Release 8.1.6.3.0 - Production > PL/SQL Release 8.1.6.3.0 - Production > CORE 8.1.6.0.0 Production > > TNS for 32-bit Windows: Version 8.1.6.3.0 - Production > NLSRTL Version 3.4.1.0.0 - Production > > SQL> > SQL> select data.dt, to_char(dt,'day') >2from (select to_date(sysdate + 1,'dd/mm/')+level-1 dt >3from dual >4connect by level <= to_date(sysdate + 10,'dd/mm/')-to_date(sysdate,'dd/mm/')+1) data >5 where to_char(data.dt,'d') not in (1,7); > > select data.dt, to_char(dt,'day') >from (select to_date(sysdate + 1,'dd/mm/')+level-1 dt >from dual >connect by level <= to_date(sysdate + 10,'dd/mm/')-to_date(sysdate,'dd/mm/')+1) data > where to_char(data.dt,'d') not in (1,7) > > ORA
Re: [oracle_br] Dias úteis.
connect by level não dá pra usar com a versão 8i, só 9i em diante. Na 8i eu usava muito a all_objects porque me dá linha suficiente para a base, mas voce pode criar sua própria view de base com linhas suficientes e usar a vontade. Fica mais ou menos assim em 8i [EMAIL PROTECTED]> variable start_date varchar2(20) [EMAIL PROTECTED]> variable end_date varchar2(20) [EMAIL PROTECTED]> exec :start_date := '10/10/2005' PL/SQL procedure successfully completed. START_DATE 10/10/2005 [EMAIL PROTECTED]> exec :end_date := '20/10/2005' PL/SQL procedure successfully completed. END_DATE 20/10/2005 [EMAIL PROTECTED]> [EMAIL PROTECTED]> [EMAIL PROTECTED]> select dt, to_char(dt,'Day') Week 2from ( 3 select to_date(:start_date,'dd/mm/')+rownum-1 dt 4from all_objects 5 where rownum <= 6 to_date(:end_date,'dd/mm/')-to_date(:start_date,'dd/mm/')+1 7) 8 where to_char(dt, 'd') not in (7,1) 9 / DT WEEK --- - 10/10/2005 00:00:00 Monday 11/10/2005 00:00:00 Tuesday 12/10/2005 00:00:00 Wednesday 13/10/2005 00:00:00 Thursday 14/10/2005 00:00:00 Friday 17/10/2005 00:00:00 Monday 18/10/2005 00:00:00 Tuesday 19/10/2005 00:00:00 Wednesday 20/10/2005 00:00:00 Thursday 9 rows selected. On 7/5/06, Augusto Cesar R. Costa <[EMAIL PROTECTED]> wrote: > > >Pessoal, bom dia. > Estou precisando de uma forma de retornar quais os dias da semana, excluindo > os finais de semana, num determinado intervalo informado. > Procurando nas mensagens antigas do grupo achei uma mensagem do nosso amigo > Marcio Portes que funciona no Oracle9i, mas precisaria de alguma solução que > pudesse ser utilizada na versão 8.1.6. > http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/msg03672.html > > Tentei adaptar para Oracle8i, executei no Oracle9i para ver se o retorno era > o desejado e deu certo:: > > SQL> select * from v$version; > > BANNER > > Oracle9i Edition Release 9.2.0.7.0 - Production > PL/SQL Release 9.2.0.7.0 - Production > CORE 9.2.0.7.0 Production > > TNS for 32-bit Windows: Version 9.2.0.7.0 - Production > NLSRTL Version 9.2.0.7.0 - Production > > SQL> > SQL> select data.dt, to_char(dt,'day') >2from (select to_date(sysdate + 1,'dd/mm/')+level-1 dt >3from dual >4connect by level <= to_date(sysdate + > 10,'dd/mm/')-to_date(sysdate,'dd/mm/')+1) data >5 where to_char(data.dt,'d') not in (1,7); > > DT TO_CHAR(DT,'DAY') > --- - > 06/07/2006 thursday > 07/07/2006 friday > 10/07/2006 monday > 11/07/2006 tuesday > 12/07/2006 wednesday > 13/07/2006 thursday > 14/07/2006 friday > > 7 rows selected > > SQL> > > > Contudo, quando executo no Oracle 8i que tenho aqui também, obtenho o erro: > > > SQL> select * from v$version; > > BANNER > > Oracle8i Edition Release 8.1.6.3.0 - Production > PL/SQL Release 8.1.6.3.0 - Production > CORE 8.1.6.0.0 Production > > TNS for 32-bit Windows: Version 8.1.6.3.0 - Production > NLSRTL Version 3.4.1.0.0 - Production > > SQL> > SQL> select data.dt, to_char(dt,'day') >2from (select to_date(sysdate + 1,'dd/mm/')+level-1 dt >3from dual >4connect by level <= to_date(sysdate + > 10,'dd/mm/')-to_date(sysdate,'dd/mm/')+1) data >5 where to_char(data.dt,'d') not in (1,7); > > select data.dt, to_char(dt,'day') >from (select to_date(sysdate + 1,'dd/mm/')+level-1 dt >from dual >connect by level <= to_date(sysdate + > 10,'dd/mm/')-to_date(sysdate,'dd/mm/')+1) data > where to_char(data.dt,'d') not in (1,7) > > ORA-01436: CONNECT BY loop in user data > > SQL> > > > Alguém tem alguma sugestão? > Atenciosamente. > Augusto Cesar Rodovalho Costa > > > [As partes desta mensagem que não continham texto foram removidas] > > -- Marcio Portes Material Tecnico em Portugues - http://mportes.blogspot.com Practical Learning Oracle - http://mportes.blogspot.com/2006/02/practical-learning-oracle.html -- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --__ Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine __ O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo,
[oracle_br] Dias úteis.
Pessoal, bom dia. Estou precisando de uma forma de retornar quais os dias da semana, excluindo os finais de semana, num determinado intervalo informado. Procurando nas mensagens antigas do grupo achei uma mensagem do nosso amigo Marcio Portes que funciona no Oracle9i, mas precisaria de alguma solução que pudesse ser utilizada na versão 8.1.6. http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/msg03672.html Tentei adaptar para Oracle8i, executei no Oracle9i para ver se o retorno era o desejado e deu certo:: SQL> select * from v$version; BANNER Oracle9i Edition Release 9.2.0.7.0 - Production PL/SQL Release 9.2.0.7.0 - Production CORE 9.2.0.7.0 Production TNS for 32-bit Windows: Version 9.2.0.7.0 - Production NLSRTL Version 9.2.0.7.0 - Production SQL> SQL> select data.dt, to_char(dt,'day') 2from (select to_date(sysdate + 1,'dd/mm/')+level-1 dt 3from dual 4connect by level <= to_date(sysdate + 10,'dd/mm/')-to_date(sysdate,'dd/mm/')+1) data 5 where to_char(data.dt,'d') not in (1,7); DT TO_CHAR(DT,'DAY') --- - 06/07/2006 thursday 07/07/2006 friday 10/07/2006 monday 11/07/2006 tuesday 12/07/2006 wednesday 13/07/2006 thursday 14/07/2006 friday 7 rows selected SQL> Contudo, quando executo no Oracle 8i que tenho aqui também, obtenho o erro: SQL> select * from v$version; BANNER Oracle8i Edition Release 8.1.6.3.0 - Production PL/SQL Release 8.1.6.3.0 - Production CORE 8.1.6.0.0 Production TNS for 32-bit Windows: Version 8.1.6.3.0 - Production NLSRTL Version 3.4.1.0.0 - Production SQL> SQL> select data.dt, to_char(dt,'day') 2from (select to_date(sysdate + 1,'dd/mm/')+level-1 dt 3from dual 4connect by level <= to_date(sysdate + 10,'dd/mm/')-to_date(sysdate,'dd/mm/')+1) data 5 where to_char(data.dt,'d') not in (1,7); select data.dt, to_char(dt,'day') from (select to_date(sysdate + 1,'dd/mm/')+level-1 dt from dual connect by level <= to_date(sysdate + 10,'dd/mm/')-to_date(sysdate,'dd/mm/')+1) data where to_char(data.dt,'d') not in (1,7) ORA-01436: CONNECT BY loop in user data SQL> Alguém tem alguma sugestão? Atenciosamente. Augusto Cesar Rodovalho Costa [As partes desta mensagem que não continham texto foram removidas] -- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --__ Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine __ O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário. Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html