Problema:
Em um pacote PL/SQL grande, tenho várias INSERT
instruções e, às vezes, encontro o ORA-00947: not enough values
erro quando o número de valores não corresponde às colunas. Quero capturar esse erro, registrá-lo e permitir que o pacote continue com operações subsequentes (como inserir em outras tabelas), sem invalidar o pacote inteiro.
Código:
CREATE TABLE RFTB_DAILY_GL_BAL (
col1 NUMBER,
col2 VARCHAR2(20),
col3 DATE
);
DECLARE
BEGIN
BEGIN
INSERT INTO RFTB_DAILY_GL_BAL-- (col1, col2, col3)
SELECT 1 FROM dual; -- Causes ORA-00947
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('error found: ' || SQLERRM);
END;
-- Proceed to next insertion
dbms_output.put_line('Continuing to next step...');
-- Simulate another operation
INSERT INTO another_table (col1, col2) VALUES ('test', SYSDATE);
END;
/
Pergunta:
Essa é uma maneira eficiente de capturar e manipular ORA-00947
sem parar a execução de todo o pacote PL/SQL? Alguma sugestão para melhorar essa abordagem?
Razão:
Estou na fase de desenvolvimento e frequentemente crio ou removo colunas com base em requisitos em evolução (sim, eu sei que não é o ideal, mas prazos curtos tornam isso necessário). Por isso, mesmo se eu especificar colunas no INSERT
, não posso confiar que a estrutura da coluna permanecerá constante. Preciso capturar ORA-00947: not enough values
e continuar a execução sem invalidar o pacote.