Sempre tratar possíveis erros de SELECTs, INSERTs, UPDATEs e DELETEs
De DTI Wiki
OBRIGATÓRIO
É mais seguro, e boa prática, fazer o controle de possíveis erros dos comandos SELECT, INSERT, UPDATE e DELETE. Utilize o tratamento de exceções, como por exemplo NO_DATA_FOUND, TOO_MANY_ROWS, DUP_VAL_ON_INDEX entre outros, já o OTHERS deve ser utilizado com muito cuidado e deve ser declarado sempre por último na lista das exceções. Também podem ser utilizados SQL%NOTFOUND, SQL%FOUND e SQL%ROWCOUNT, mas lembre-se que estes comandos não funcionam com a instrução INSERT.
Exceções mais comumente usadas:
NO_DATA_FOUND – SELECT; TOO_MANY_ROWS – SELECT; DUP_VAL_ON_INDEX – INSERT, UPDATE; VALUE_ERROR – SELECT, INSERT, UPDATE; ZERO_DIVIDE – SELECT, INSERT,UPDATE.
DECLARE v_email fornecedor.email%TYPE; BEGIN UPDATE fornecedor SET cpfcgc = '60423365001041' WHERE codfornecedor = 156800; SELECT f.email INTO v_email FROM fornecedor f WHERE f.codfornecedor = 156800; /* Este código não funciona com SELECT */ IF SQL%NOTFOUND THEN DBMS_OUTPUT.put_line('Nenhum fornecedor encontrado'); END IF; END;
DECLARE v_email fornecedor.email%TYPE; BEGIN UPDATE fornecedor SET cpfcgc = '60423365001041' WHERE codfornecedor = 156800; /* Verifica se o UPDATE não alterou nenhum registro */ IF SQL%NOTFOUND THEN DBMS_OUTPUT.put_line('Nenum fornecedor atualizado'); END IF; /* Mostra quantos registros foram atualizados */ DBMS_OUTPUT.put_line('foram alterados ' || SQL%ROWCOUNT || ' registros'); SELECT f.email INTO v_email FROM fornecedor f WHERE f.codfornecedor = :varcodigo; EXCEPTION /* Neste código, esta exceção pode ocorrer no UPDATE */ WHEN DUP_VAL_ON_INDEX THEN DBMS_OUTPUT.put_line('Já existe fornecedor com este CNPJ'); DBMS_OUTPUT.put_line('Código do erro oracle ' || SQLCODE); DBMS_OUTPUT.put_line('Mensagem do erro oracle ' || SQLERRM); /* Neste código, esta exceção pode ocorrer no SELECT */ WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.put_line('Não foi encontrado fornecedor com este código'); END;
Podem ser criados vários blocos BEGIN … EXCEPTION … END quanto necessários para o tratamento de exceções;
BEGIN BEGIN … EXCEPTION END; BEGIN … EXCEPTION END; BEGIN … EXCEPTION END; END;