Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

No gatilho do MySQL, é possível definir uma variável de usuário com NEW.col e usá-la na consulta de atualização?


Isso não é possível conforme descrito com SQL dinâmico / Declaração Preparada. Isso geraria Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger na tentativa de até CREATE TRIGGER .

O mais próximo que você pode chegar da automação é usar CREATE EVENT . Eventos são programas armazenados agendados que são executados no agendamento/intervalo de sua escolha. Os intervalos são:

Você pode definir um "sinalizador" por assim dizer em uma linha, como a tabela que você está descrevendo acima que tem o gatilho Após a inserção. O evento poderia então realizar a Declaração Preparada dinamicamente e execute-o.

Veja minha resposta aqui em Gerenciamento de eventos .

Eu tenho que dizer que mesmo se executado em um evento, o que você está propondo é quase Sempre o sinal de um design de esquema ruim que não resistiria bem à revisão por pares.

Uma razão pela qual o sql dinâmico e um Prepared Stmt não são permitidos é porque o gatilho precisa ser rápido, e até mesmo o DDL pode ser inserido na string e executado. E stmts DDL como ALTER TABLE não são permitidos em gatilhos (eles podem levar horas para serem executados literalmente).

Seu esquema também pode ter uma tabela compartilhada com uma coluna ven_code sendo a coluna diferenciadora. Em vez disso, você optou por criar novas tabelas para cada ven_code . Isso normalmente é uma escolha ruim de design e desempenho.

Se você precisar de ajuda com o design do esquema, ficarei feliz em conversar sobre isso com você em uma sala de bate-papo.