Percebi que importar dados truncados apenas gera um aviso. Achei que seria simples capturar esse aviso e sinalizar um erro por meio de um manipulador, mas não consigo fazer isso. Alguma sugestão?
CREATE OR REPLACE PROCEDURE FILE_IMPORT_HANDLER(filename VARCHAR(255), tablename
VARCHAR(255))
LANGUAGE SQL
BEGIN
DECLARE EXIT HANDLER FOR SQLSTATE '22001'
SIGNAL SQLSTATE '75002'
SET MESSAGE_TEXT = '...';
CALL ADMIN_CMD('import from ' || filename || ' of del insert into ' || tablename);
END @
Eu gostaria de falhar muito se 22001 for encontrado. De certa forma, aumente a gravidade do truncamento de dados durante a importação
Defina a
WARNINGCOUNT 1
opção:(ênfase minha). Nesse caso, você nem precisará do seu manipulador.
A propósito, um bom exemplo de Problema XY™. Na verdade, você não precisa "aumentar a gravidade dos avisos", basta
IMPORT
encerrar no primeiro aviso.Isso parece funcionar:
Não tenho certeza se é possível ter uma granularidade mais fina no manipulador. Se eu correr:
com um arquivo que contém o erro que estou tentando capturar, um sqlstate vazio é retornado.