Estou carregando arquivos .csv no Mariadb 10.6 usando LOAD DATA LOCAL INFILE.
Há uma coluna DATE chamada posted_on
nos dados de entrada e preciso armazenar o nome do mês em outro campo monther
, de preferência como parte do processo de carregamento.
Se postado_em = '2023-10-13' então mês = 'outubro'
Presumi que um gatilho seria apropriado e tentei variações (adicionadas NEW., antes/depois) do seguinte:
CREATE TRIGGER `t_add_monther` after INSERT ON `qn_txs`
FOR EACH ROW
UPDATE qn_txs SET NEW.qn_txs.`monther` = MONTHNAME(`posted_on`);
Mas não consigo superar o temido ERRO 1442 (HY000) na linha 1: Não é possível atualizar a tabela 'qn_txs' na função/gatilho armazenado porque ela já é usada pela instrução que invocou esta função/gatilho armazenado.
Alguma ideia? É necessária uma abordagem diferente?
Certo, você não pode UPDATE/DELETE/INSERT em um gatilho para a mesma tabela. Isso pode causar um loop infinito de gatilhos.
Mas você não precisa usar UPDATE se estiver alterando valores na linha que está sendo inserida. Se você
SET NEW.ColumnName
estiver em um gatilho, isso altera o valor dessa coluna na linha que gerou o gatilho.Demonstração: https://dbfiddle.uk/qC9iCUbg