Pular para o conteúdo
Visualizando 11 posts - 1 até 11 (de 11 do total)
  • Autor
    Posts
  • #86801
    walterjun
    Participante

      Bom dia a todos,

      estou com um pequeno probleminha 😕 , estou transportando os dados de uma tabela de 980 colunas para outra, mas eu peguei a minha e a dividi em outras 4 por assunto e outros critérios. o problema é o seguinte:

      tenho quatro colunas que eu preciso saber a informação de qualquer forma e a transportar pra minha tabela, mas os outros campos eu preciso alterá-los para 99, seria algo do tipo:

      se coluna5 = C então
      INSERT INTO minhatabela
      ( col1, col2, col3…, col980)
      (SELECT col1, col2, col3, col 4, as restantes nem preciso pegar pois se a col 5 for = C, independentemente do valor das outras colunas, elas tem que ser 99) FROM minhaoutratabela);

      Alguém teria alguma idéia?
      Não sei se consegui expressar direito o que queria mas é isso ai.

      Desde já Obrigado.

      #86803
      Avatar photoRegis Araujo
      Participante

        Fala Walter.. boa tarde..

        Só para entender.. vc precisa inserir em sua tabela apenas os registros que possuem na coluna 5 o caracter C?

        Se for isto.. faz assim…

        SQL> INSERT INTO minhatabela
        (col1, col2, col3..., col980)
        (SELECT col1, col2, col3..., col980 FROM minhaoutratabela
        where col5 = 'C');

        Desta maneira.. vc somente irá inserir os valores que possuem o caracter “C” na coluna 5…

        Se não for isto.. posta ai um exemplo de como estão as tabelas e como vc precisa que fiquem…

        Abraços..

        #86805
        walterjun
        Participante

          Boa tarde Thunder_Catz,

          com este comando eu vou inserir somente onde tiver o caracter C na coluna5 mas da coluna 6 em diante eu quero que o valor seja 99 e não o valor que me vai ser retornado pelo SELECT.

          Vlw cara
          Abç

          #86807
          Avatar photoRegis Araujo
          Participante

            Fala Walter..

            Entendi…

            Bom.. como vc tem diversas colunas é bem complicado isto.. oq vc poderia ter feito foi criar a tabela com a opção DEFAULT ’99’.. ai bastava vc inserir apenas nas colunas que vc precisa e as demais iriam ser alimentadas com 99…

            Ex..

            SQL> create table teste
            1 (
            2 ID_TESTE NUMBER(2) not null,
            3 TESTE VARCHAR2(2) DEFAULT '99'
            4 );
            Table created

            SQL> INSERT INTO TESTE(ID_TESTE) VALUES(1);
            1 row inserted

            SQL> SELECT * FROM TESTE;

            ID_TESTE TESTE
            -------- -----
            1 99

            Bom.. nunca precisei trabalhar com uma tabela com tantas colunas.. mas esta seria uma opção.. vou ver se tem alguma outra coisa para lhe ajudar…

            Abraços…

            #86808
            walterjun
            Participante

              Era isso mesmo que eu queria
              Eu ainda não criei a tabela e isso me dá um adianto já pra ir começando, vai dar um trabalhinho razoável mas tenho que começar logo.
              Valeu mesmo mas eu preciso saber de outra forma pois vou ter que vez ou outra atualizar o banco e quando eu for atualizar…
              Mas valeu mesmo Thunder_Catz

              #86819
              Rodrigo Mesquita
              Participante

                Walter,

                Voce pode tb criar um trigger before insert. Que verifique se o valor da coluna5 = ‘C’.

                create or replace trigger TRG_exemplo
                before insert on tabela_teste
                for each row
                begin
                If :new.coluna5 = ‘C’ Then
                :new.coluna6 := 99,
                :new.coluna7 := 99,
                :new.coluna8 := 99,
                :new.coluna9 := 99,
                — completa até a ultima coluna
                End If;
                end TRG_exemplo;

                #86827
                walterjun
                Participante

                  RodrigoMesquita,

                  até que serve para quando eu for atualizar a tabela mas só que são 980 colunas, então eu vou ter que atribuir 980 vezes o valor 99, na verdade são mais que 980 colunas porque eu dividi a tabelona em 4 partes pq o máximo são 1000 colunas por tabela e o desempenho não ficaria muito bom então, eu tive que repetir uma coluna ou outra nessas tabelas.

                  Thanks pela colaboração

                  #86840
                  Rodrigo Mesquita
                  Participante

                    blz cara…

                    Existe mesmo a necessidade de criar uma tabela com mais de 950 colunas?

                    #86844
                    walterjun
                    Participante

                      Pior que sim, a quantidade de informações é muito grande e há a necessidade de fazer lenvantamentos estatísticos em cima dessas informações logo, praticamente todas as colunas são numéricas, mas eu não coloquei as 950 colunas em uma única tabela porque senão o desempenho não seria muito bom até porque serão praticamente 5600 linhas que irei inserir então pra que eu posso executar uma consulta simples iria demorar um pouco mais que o normal, e pra que isso não ocorra eu a dividi em 4 tabelas. 😛

                      #86846
                      Rodrigo Mesquita
                      Participante

                        missão complicada essa hehe

                        Então a solução é que vc trate os inserts antes de executar para que executem da maneira que vc quer. E criar um trigger para que não permita que seja feito um insert de outra forma.

                        #86849
                        walterjun
                        Participante

                          Mas ai é que está o problema, estou usando um DW e meus inserts serão um pouco diferentes dos outros, esses primeiros de carga serão diferentes dos outros de atualização, sorte minha que eu vou ter que executar isso vez ou outra 😀

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