我正在创建一个像这样的存储函数
CREATE FUNCTION getVendorID(IN venname VARCHAR(255))
RETURNS INT
BEGIN
DECLARE a INT;
SELECT vendorid FROM vendors WHERE vendorname LIKE venname INTO a;
RETURN a;
END$$
但收到错误:
错误1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在“IN venname VARCHAR(255)”附近使用正确的语法 返回INT
BEGIN
宣布INT;
在第1行选择vendorid FRO'
答案 0 :(得分:3)
MySQL函数只接受IN参数,因此不能将它们声明为IN
。
DELIMITER $$
CREATE FUNCTION getVendorID(venname VARCHAR(255))
RETURNS INT
BEGIN
DECLARE a INT;
SELECT vendorid INTO a FROM vendors WHERE vendorname LIKE venname;
RETURN a;
END$$
DELIMITER ;
答案 1 :(得分:2)
因此,您的函数定义应如下所示:
DELIMITER $$
DROP FUNCTION IF EXISTS getVendorID$$
CREATE FUNCTION getVendorID( venname VARCHAR(255) )
RETURNS INT
READS SQL DATA
BEGIN
DECLARE a INT;
SELECT vendorid INTO a FROM vendors WHERE vendorname LIKE venname;
RETURN a;
END$$
DELIMITER ;
答案 2 :(得分:1)
为什么所有的代码?使用此:
CREATE FUNCTION getVendorID(IN venname VARCHAR(255))
RETURNS INT
BEGIN
RETURN (SELECT vendorid FROM vendors WHERE vendorname LIKE venname LIMIT 1);
END$$
另请注意引言od LIMIT 1
。如果多个供应商匹配,您的代码将会爆炸;你不能把多行的vendorid放到一个变量中。
您可以考虑使用%
作为服务向您的来电者自动换行:WHERE vendorname LIKE CONCAT('%', venname, '%')