我的目标是创建一个MySQL函数,它接受任何字符串并返回它的修改版本。细节不重要,我的问题是签名。我主要是寻求验证这类函数的最佳实践。
这是我想要实现的目标的一种(不可行的)愿景:
CREATE FUNCTION example1(param VARCHAR(n))
RETURNS VARCHAR(n)
BEGIN
DECLARE result VARCHAR(n);
SET result = param;
-- do stuff --
RETURN result;
END//
使用这个,这种奇怪的互动出现了:
CREATE FUNCTION example1(param VARCHAR(35))
RETURNS VARCHAR(35)
BEGIN
DECLARE result VARCHAR(35);
SET result = param;
-- do stuff --
RETURN result;
END//
CREATE FUNCTION example2(param VARCHAR(10))
RETURNS VARCHAR(10)
BEGIN
DECLARE result VARCHAR(10);
SET result = example1(param);
-- do stuff --
RETURN result;
END//
所以example2仍然有用。这似乎varchar长度仅在输入上验证。 然后,为了处理所有字符串,我得到了我的生产函数:
CREATE FUNCTION example1(param VARCHAR(10000))
RETURNS VARCHAR(10000)
BEGIN
DECLARE result VARCHAR(10000);
SET result = param;
-- do stuff --
RETURN result;
END//
现在该功能的签名搞砸了。它可以工作,我可以设置一个使用它的较小varchar的列 - 但谁会称这样的函数不知道实现细节? 有干净的方法吗?