DROP PROCEDURE IF EXISTS initial_compare; DELIMITER // CREATE PROCEDURE initial_compare () SQL SECURITY INVOKER BEGIN DECLARE sp_recid INT DEFAULT 0; DECLARE sp_CustomerRows INT DEFAULT 0; DECLARE spC_dbid INT DEFAULT 0; DECLARE spC_tableid INT DEFAULT 0; DECLARE spC_rowid INT DEFAULT 0; DECLARE sp_ani CHAR(25) DEFAULT ''; DECLARE sp_dialedno CHAR(25) DEFAULT ''; DECLARE sp_duration INT DEFAULT '0'; DECLARE sp_callstart DATETIME DEFAULT '0000-00-00 00:00:00'; DECLARE spR_dbid INT DEFAULT 0; DECLARE spR_tableid INT DEFAULT 0; DECLARE spR_rowid INT DEFAULT 0; SELECT count(*) INTO sp_CustomerRows FROM customer; WHILE sp_recid < sp_CustomerRows DO # We have to Prepare/Execute/Deallocate to be able to use LIMIT SET @_sp_recid = sp_recid; PREPARE stmt FROM "SELECT cdr_dbid,cdr_tableid,cdr_rowid,ani,dialedno,duration,callstart INTO spC_dbid,spC_tableid,spC_rowid,sp_ani,sp_dialedno,sp_duration,sp_callstart FROM customer WHERE matched='N' LIMIT ?,1"; EXECUTE stmt USING @_sp_recid; DEALLOCATE PREPARE stmt; SELECT cdr_dbid,cdr_tableid,cdr_rowid INTO spR_dbid,spR_tableid,spR_rowid FROM carrier WHERE dialedno='sp_dialedno' AND ani='sp_ani' AND matched='N' AND ABS(sp_duration - duration) < 10 AND TIMEDIFF(sp_callstart, callstart) BETWEEN TIME('-00:10:00') AND TIME('4:10:00') ORDER BY ABS(sp_duration - duration),ABS(TIME_TO_SEC(TIMEDIFF('sp_callstart',callstart))) LIMIT 1; IF spR_dbid != 0 THEN UPDATE carrier SET matched='Y' WHERE cdr_dbid=spR_dbid AND cdr_tableid=spR_tableid AND cdr_rowid=spR_rowid; END IF; SET sp_recid = sp_recid + 1; END WHILE; END // DELIMITER ;