相当于执行MySql存储过程

时间:2016-04-07 06:07:11

标签: php mysql stored-procedures

我创建了以下MySql存储过程,它完全可以正常工作:

DELIMITER //
CREATE PROCEDURE UpsertContactable(
    IN Email VARCHAR(254),
    IN ServerId INT(11),
    IN Contactable BOOLEAN,
    IN LastUpdate TIMESTAMP
)
BEGIN
    DECLARE cnt INT DEFAULT 0;
    SELECT COUNT(*) INTO cnt
    FROM Contactable
    WHERE Contactable.Email = Email
      AND Contactable.Server__ = ServerId;
    IF ( cnt > 0 ) THEN
        UPDATE Contactable
        SET Contactable.Contactable = Contactable,
            Contactable.Last_Update = LastUpdate
        WHERE Contactable.Email = Email
          AND Contactable.Server__ = ServerId
          AND Contactable.Last_Update < LastUpdate;
    ELSE
        INSERT INTO Contactable (`Email`, `Server__`, `Contactable`, `Last_Update`)
        VALUES (Email, ServerId, Contactable, LastUpdate);

    END IF;
END //
DELIMITER ;

不幸的是,我公司反对使用存储过程。

我知道可以通过两次调用数据库来重写这个(我正在使用PHP)(即一个用于计算cnt,另一个用于执行insert或{{1} })。

但考虑到要处理的数据量,我想避免额外的数据库往返。

是否可以每行发送一个唯一的语句来处理并执行与该过程相同的操作,而不使用此过程?

0 个答案:

没有答案