Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #93946
    Thiago Vilhena
    Participante

      Pessoal existe uma maneira de fazer um select ou algo parecido para que gere inserts de um certo periodo de tempo? por exemplo gostaria de inserir em um campo de data todos os dias e meses de 2009 até 2020, qual a melhor maneira de fazer isso?

      insert into teste(2009-01-01)
      insert into teste(2009-01-02)
      insert into teste(2009-01-03)
      insert into teste(2009-01-04)

      #93947
      fsitja
      Participante

        Dá para gerar todos os dias com uma query hierárquica (connect by), e inserir as linhas na tabela com um insert .. select.

        O select seria assim:


        SQL> select dt_ini + level - 1 dt
        2 from (select trunc(to_date(ano_inicio, 'YYYY'), 'YYYY') dt_ini,
        3 trunc(to_date(ano_fim + 1, 'YYYY'), 'YYYY') - 1 dt_fim
        4 from (select 2009 ano_inicio, 2020 ano_fim from dual)) t
        5 connect by level <= dt_fim - dt_ini + 1;

        DT

        1/1/2009
        2/1/2009
        3/1/2009
        4/1/2009
        5/1/2009
        6/1/2009
        ...
        ... etc

        É só colocar os anos que você quer lá, se for o caso de mudar 2009 e 2020 como início e fim, respectivamente.

        Exemplo de execução com insert:

        Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
        Connected as fsitja

        SQL>
        SQL> create table t1 (dt date);

        Table created
        SQL> insert into t1 (dt)
        2 select dt_ini + level - 1 dt
        3 from (select trunc(to_date(ano_inicio, 'YYYY'), 'YYYY') dt_ini,
        4 trunc(to_date(ano_fim + 1, 'YYYY'), 'YYYY') - 1 dt_fim
        5 from (select 2009 ano_inicio, 2020 ano_fim from dual)) t
        6 connect by level

        #93952
        Thiago Vilhena
        Participante

          Ihhhh manuhh.. vlwwww.. funcionou show de bola!!!

          #93965
          Thiago Vilhena
          Participante

            Po.. aproveitando aqui o mesmo topico, tipo eu gostaria de criar uma procedure que execute essa query

            SELECT SYSDATE,
            LAST_DAY(SYSDATE) "Last",
            LAST_DAY(SYSDATE) - SYSDATE "Days Left"
            FROM DUAL;

            e mostre na tela quantos dias faltam para virar o mes, dai feito isso se os dias para virada do mes forem menor que 3, verificar se a tabela que esta chamando na procedure já esta particionada pra aquele respectivo mes, caso ela nao esteja particionada pra aquele mes, tem que executar uma DDL de particionamento daquela tabela.

            rsrs ta arduo isso =D quem puder ajudar ai =D

            #93978
            fsitja
            Participante

              Talvez seja melhor abrir num tópico novo a segunda pergunta, para o pessoal ver na listagem pelo assunto. Eu não tenho privilégio de DBA aqui no trabalho para testar agora, vou ter que ver isso em casa mais tarde.

              Abraço,
              Francisco.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.