Spyder.RV 0 Denunciar post Postado Fevereiro 8, 2011 Estou montando uma rotina generica pra apagar registros de uma tabela, e após isso me dar um retorno se a exclusão foi bem sucedida ou não. 1- v_tabela => Nome da tabela que vai ter os registros excluidos 2- v_filtro => Filtro da exclusão Apagar usando o código CALL apagaRegistros( "cliente", "codCliente = 20"); SELECT @retorno as apagouRegistro; Apagar usando o nome (ou parte dele) CALL apagaRegistros( "cliente", "nomeCliente LIKE '%MARIA%'"); SELECT @retorno as apagouRegistro; CREATE PROCEDURE apagaRegistros( v_tabela VARCHAR(255), v_filtro TEXT) BEGIN IF (v_filtro = "" OR v_filtro = NULL) THEN SET v_filtro = ""; ELSE SET v_filtro = CONCAT(" WHERE ", v_filtro); END IF; SET @sqlDelete = CONCAT("DELETE FROM ", v_tabela, v_filtro); PREPARE consulta FROM @sqlDelete; EXECUTE consulta; DEALLOCATE PREPARE consulta; SET @retorno = IF( (SELECT ROW_COUNT()) > 0, true, false ); END; $ O código funcionou bem, pois os registros foram apagados, porém o SELECT ROW_COUNT() tá retornando -1 e não a qtd de linhas excluidas. Eu sei que ROW_COUNT() funciona bem pra INSERTS e UPDATES, mas não tá dando certo pra DELETE. Qual é o meio correto pra VALIDAR uma exclusão, verificando se foi bem sucedida ou não? Compartilhar este post Link para o post Compartilhar em outros sites
Spyder.RV 0 Denunciar post Postado Fevereiro 11, 2011 Tá resolvido.. foi só deixar a linha linha: SET @retorno = IF( (SELECT ROW_COUNT()) > 0, true, false ); pra ficar antes dfo DEALLOCATE PREPARE consulta. Compartilhar este post Link para o post Compartilhar em outros sites