- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 4 meses atrás por rman.
-
AutorPosts
-
12 de agosto de 2011 às 5:34 pm #100298RCBMapsParticipante
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.
12 de agosto de 2011 às 5:39 pm #100299felipegParticipante[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.12 de agosto de 2011 às 5:59 pm #100301RCBMapsParticipanteeu 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.
12 de agosto de 2011 às 6:05 pm #100303felipegParticipante[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.12 de agosto de 2011 às 8:17 pm #100309RCBMapsParticipanteObrigado 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;
13 de agosto de 2011 às 6:58 am #100317rmanParticipante[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…
-
AutorPosts
- Você deve fazer login para responder a este tópico.