- Este tópico contém 10 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 10 meses atrás por
walterjun.
-
AutorPosts
-
19 de maio de 2009 às 6:53 pm #86801
walterjun
ParticipanteBom 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.
19 de maio de 2009 às 7:52 pm #86803Regis Araujo
ParticipanteFala 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..
19 de maio de 2009 às 8:25 pm #86805walterjun
ParticipanteBoa 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ç19 de maio de 2009 às 9:12 pm #86807Regis Araujo
ParticipanteFala 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 createdSQL> INSERT INTO TESTE(ID_TESTE) VALUES(1);
1 row insertedSQL> SELECT * FROM TESTE;
ID_TESTE TESTE
-------- -----
1 99Bom.. 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…
19 de maio de 2009 às 9:32 pm #86808walterjun
ParticipanteEra 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_Catz19 de maio de 2009 às 10:28 pm #86819Rodrigo Mesquita
ParticipanteWalter,
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;19 de maio de 2009 às 11:18 pm #86827walterjun
ParticipanteRodrigoMesquita,
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
20 de maio de 2009 às 6:52 pm #86840Rodrigo Mesquita
Participanteblz cara…
Existe mesmo a necessidade de criar uma tabela com mais de 950 colunas?
20 de maio de 2009 às 8:56 pm #86844walterjun
ParticipantePior 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. 😛
20 de maio de 2009 às 9:06 pm #86846Rodrigo Mesquita
Participantemissã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.
20 de maio de 2009 às 9:39 pm #86849walterjun
ParticipanteMas 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 😀
-
AutorPosts
- Você deve fazer login para responder a este tópico.