DROP PROCEDURE IF EXISTS foo; CREATE PROCEDURE foo() SELECT 1+1; DROP FUNCTION IF EXISTS funcid; delimiter // CREATE FUNCTION funcid(a_funcname VARCHAR(255)) RETURNS INT UNSIGNED DETERMINISTIC MODIFIES SQL DATA COMMENT 'returns (creating if necessary) a function id for the given function name' BEGIN DECLARE retid INT UNSIGNED; SELECT funcid INTO @retid FROM funcmap WHERE funcname=a_funcname; IF retid IS NOT NULL THEN RETURN @retid; END IF; INSERT IGNORE INTO funcmap (funcname) VALUES (a_funcname); SELECT funcid INTO @retid FROM funcmap WHERE funcname=a_funcname; RETURN @retid; END //