› Fóruns › SQL e PL/SQL › criar procedure
- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 7 meses atrás por
carloscps.
-
AutorPosts
-
10 de outubro de 2007 às 5:54 am #80586
carloscps
ParticipanteGostaria de uma ajuda para criação de procedure em Oracle 10g
Tenho duas tabelas (table1 e table2).Na table1 vou ter dados que vou jogar na table2 e caso o registro já esteja na table2,
preciso fazer o update e se não, o insert. Como faço essa implementação no “if” e como faço a declaração da table2.
Segue o que tenho montado…AS
cod_erro NUMBER;
message_erro VARCHAR2(255);
CURSOR C1 IS
SELECT emp, codigo, descricao FROM table1 FOR UPDATE;
REGISTRO C1%ROWTYPE;BEGIN
OPEN C1;
LOOP
FETCH C1 INTO REGISTRO;
EXIT WHEN C1%NOTFOUND;
if ??????? (se o table1.emp=table2.emp então fazer o update, se não o insert)
then
update table2 set cod=REGISTRO.cod,descricao=REGISTRO.descricao) ;
else
insert into table2 (emp, codigo, descricao) values (REGISTRO.emp,REGISTRO.cod,REGISTRO.descricao);
end if;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
cod_erro := SQLCODE;
message_erro := SQLERRM;
INSERT INTO CARLOS.ERROS_IMPORT
VALUES (cod_erro, message_erro, sysdate);
update table1 set date=SYSDATE where CURRENT OF c1;
CLOSE C1 ;
END;obrigado
Carlos
10 de outubro de 2007 às 2:41 pm #80587Marcio68Almeida
ParticipanteO jeito mais simples que encontrei foi fazer o insert, caso dê erro, faça o update caso volte a dar erro aviso ao usuário.
Traduzindo :
insert …
if erro then
update …
if erro then
raise
end if
end ifVocê vai perguntar por que não faço uma consulta antes para saber o que fazer, vou te dizer que é muito mais “barato” fazer a transação direto e testar o erro do que consultar para decidir o que fazer…
Não lembro qual a variável que verifica erro já que faz muito tempo que não faço procedures…
Se a grande maioria das transações for update, então inverta o processo, faça update, teste e faça insert…
Não esqueça de fazer teste para tudo o que for fazer e anunciar qualquer tipo de falha, relevante ou não, pois disso depende o bom andamento de qualquer sistema…10 de outubro de 2007 às 5:29 pm #80592carloscps
ParticipanteMarcio, obrigado pela atenção, mas o que eu queria, era exatamente fazer o teste. Alguem sabe como faz?
Obrigado
10 de outubro de 2007 às 5:34 pm #80593Marcio68Almeida
ParticipanteTente isto…
select count(*) into variavel
from tabela
where condiçãoif variavel = 0 then
insert
else
update
end if10 de outubro de 2007 às 9:04 pm #80598carloscps
ParticipanteMárcio, resolvido meu problema.
Obrigado
Carlos
-
AutorPosts
- Você deve fazer login para responder a este tópico.
› Fóruns › SQL e PL/SQL › criar procedure