Pular para o conteúdo
Visualizando 6 posts - 1 até 6 (de 6 do total)
  • Autor
    Posts
  • #100298
    RCBMaps
    Participante

      Estou criando uma rotina onde tenho uma tabela de backup e criei um cusor onde vou inserir todos os dados do cursor na tabela oficial, porem qual o comando SQL para inserir todo os conteudo de um cursor com todos os seus campos em outra tabela sem ter que informar os campos, pois a tabela de backup é identica a tabela oficial e por isso quero que insere todos os campos que o meu cursor trouxer.

      #100299
      felipeg
      Participante

        [quote=”RCBMaps”:1s98g6km]Estou criando uma rotina onde tenho uma tabela de backup e criei um cusor onde vou inserir todos os dados do cursor na tabela oficial, porem qual o comando SQL para inserir todo os conteudo de um cursor com todos os seus campos em outra tabela sem ter que informar os campos, pois a tabela de backup é identica a tabela oficial e por isso quero que insere todos os campos que o meu cursor trouxer.[/quote]

        Amigo, acho que o CTAS (create table as select) resolve essa:


        Create table tabela_backup as select * from tabela

        O select é flexível e atende a necessidade.

        Atenciosamente,
        Felipe.

        #100301
        RCBMaps
        Participante

          eu não quero criar uma nova tabela, na verdade eu tenho as duas tabelas a de backup e a oficial, como eu perdi informações da tabela oficial eu tenho que voltar os dados do backup na oficial, porem em forma de cursor, pois não é todos dos dados e sim um consulta de dados.

          #100303
          felipeg
          Participante

            [quote=”RCBMaps”:170tnueo]eu não quero criar uma nova tabela, na verdade eu tenho as duas tabelas a de backup e a oficial, como eu perdi informações da tabela oficial eu tenho que voltar os dados do backup na oficial, porem em forma de cursor, pois não é todos dos dados e sim um consulta de dados.[/quote]

            São linhas que estão faltando ou informações nas linhas?
            Pois um insert com select também poderia ajudar… menos trabalho pra escrever, mais rápido e mais bonito 8)

            http://www.adp-gmbh.ch/ora/sql/insert/s … query.html

            De qualquer forma se você realmente precisa de um cursor da um olhada nesse link

            http://psoug.org/reference/array_processing.html

            Procura por FORALL Insert ou Update…

            Atenciosamente,
            Felipe.

            #100309
            RCBMaps
            Participante

              Obrigado ultilizei o FORALL éra exatamente o que eu queria.

              Segue um exemplo do que eu criei.

              DECLARE
              CURSOR classes_1 IS
              SELECT *
              FROM classes;

              TYPE fetch_array IS TABLE OF classes%ROWTYPE;
              s_array fetch_array;
              BEGIN
              OPEN classes_1;
              LOOP
              FETCH classes_1 BULK COLLECT INTO s_array LIMIT 1000;

              FORALL i IN 1..s_array.COUNT
              INSERT INTO classes_bkp VALUES s_array(i);
              
              EXIT WHEN classes_1%NOTFOUND;
              

              END LOOP;
              CLOSE classes_1;
              COMMIT;
              END;

              #100317
              rman
              Participante

                [quote=”RCBMaps”:10088a2h]Obrigado ultilizei o FORALL éra exatamente o que eu queria.

                Segue um exemplo do que eu criei.

                DECLARE
                CURSOR classes_1 IS
                SELECT *
                FROM classes;

                TYPE fetch_array IS TABLE OF classes%ROWTYPE;
                s_array fetch_array;
                BEGIN
                OPEN classes_1;
                LOOP
                FETCH classes_1 BULK COLLECT INTO s_array LIMIT 1000;

                FORALL i IN 1..s_array.COUNT
                INSERT INTO classes_bkp VALUES s_array(i);
                
                EXIT WHEN classes_1%NOTFOUND;
                

                END LOOP;
                CLOSE classes_1;
                COMMIT;
                END;
                [/quote]

                Acho que cheguei atrasado, o problema já foi resolvido, mas mesmo assim vou registrar outra solução…

                A solução é fantástica… É através de MERGE…


                SQL> MERGE INTO moto2 a
                2 USING moto b
                3 ON (a.moto_id = b.moto_id)
                4 WHEN MATCHED THEN
                5 UPDATE SET a.dono = b.dono
                6 WHEN NOT MATCHED THEN
                7 INSERT (moto_id, moto_nome, dono)
                8 VALUES (b.moto_id, b.moto_nome, b.dono);

                Seguindo o artigo:

                http://miltonbastos.com/2011/07/29/merge/

                É justamente sincronizar 2 tabelas… Que no seu caso é a original com a de backup…

                No caso da moto e moto2, se encontrar a linha nas duas tabelas, o campo dono será sincronizado, se não encontrar será inserido… Resultando no final do processo, que as 2 tabelas ficaram identicas…

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