I only need to change half of the records in a MySQL table

Question:

I did this procedure in MySQL to change a record of only half of the table but it produces an inexplicable error:

Apparently the trouble is in LIMIT that refuses to accept a variable.

In SQLServer I used TOP (50) PERCENT solved the problem, but in MySQL I don't find a solution. Can someone help me?

BEGIN
DECLARE CodigoNovaLista INT;
DECLARE QuantidadeTotal INT;
DECLARE QuantidadeListaNova INT;
DECLARE QuantidadeListaAtual INT;

DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;

START TRANSACTION;
SELECT QuantidadeTotal = TotalEmails FROM tabelalistas WHERE IDLista = @IDListaAtual;

SET QuantidadeListaAtual =  QuantidadeTotal /2;
SET QuantidadeListaNova = QuantidadeTotal - QuantidadeListaAtual;

INSERT INTO tabelalistas (Nome, IDCliente) VALUES(@NovoNome, @IDCliente); 
SELECT CodigoNovaLista = LAST_INSERT_ID();

UPDATE tabelaemailsimportados SET IDLista=CodigoNovaLista WHERE IDLista = @IDListaAtual LIMIT QuantidadeListaNova;

UPDATE tabelalistas SET TotalEmails=QuantidadeListaAtual WHERE IDLista = @IDListaAtual ;
UPDATE tabelalistas SET TotalEmails=QuantidadeListaNova WHERE IDLista = CodigoNovaLista ;

COMMIT;
END

Answer:

An alternative is to assemble the query into a text variable and execute it dynamically with the EXECUTE command.

Example:

EXECUTE 'UPDATE tabelaemailsimportados ' ||
    ' SET IDLista=CodigoNovaLista WHERE IDLista = ' || 
    to_char(@IDListaAtual, '9') || 
    ' LIMIT ' || to_char(@QuantidadeListaNova, '9')
Scroll to Top