gre*_*emo 5 mysql sql stored-procedures
我是referencig name,description和user_id列的meta表.未来两次,也许更多(谁知道?).这些列用于计算元资源的ETag.
添加一个有助于计算ETag的列将迫使我将代码更改N次,这很糟糕.
有没有办法让它干并将这些列名存储在别处?因为我想INSERT在执行meta 时也使用这些列名.
IF only = true THEN
-- Calculate ETag on meta fields only
UPDATE meta
SET etag = etag(CONCAT(name, description, user_id))
WHERE id = meta_id;
ELSE
-- Calculate Etag on meta fields and meta customers
BEGIN
DECLARE c_etags VARCHAR(32);
-- Compute c_etags
UPDATE meta
SET etag = etag(CONCAT(etag(name, description, user_id), c_etags))
WHERE id = meta_id;
END;
END IF;
Run Code Online (Sandbox Code Playgroud)
免责声明:这段代码是未经测试的,除了简单的陈述之外,我对MySQL的东西很新.
编辑:etag是MD5MySQL功能.也许这是一个选择:
CREATE PROCEDURE set_meta_etag(IN meta_id INT, IN related TEXT)
NOT DETERMINISTIC
BEGIN
UPDATE meta
SET etag = etag(CONCAT(name, description, user_id,
IF(related IS NOT NULL, related, '')))
WHERE id = meta_id;
END //
-- First call
CALL set_meta_etag(meta_id, NULL);
-- Second call
CALL set_meta_etag(meta_id, c_etags);
Run Code Online (Sandbox Code Playgroud)
但它不适用于INSERT声明.