我正在编写一个执行以下操作的存储过程: 在给定的表v_Tablename中,如果v_ColumnName中等于v_Value的行数计数大于0,则返回true.否则,返回false.可以使用此存储过程的一些示例:
- 如果Person表(v_Tablename)中存在人员,其中Age(v_ColumnName)为23(v_Value),则返回
- 如果员工表(v_Tablename)中存在邮箱,则返回testing123@gmail.com
这是我的代码:
create
definer = root@localhost procedure CheckValueExists(
IN v_Tablename VARCHAR(100),
IN v_ColumnName VARCHAR(100),
IN v_Value VARCHAR(100),
OUT v_Exists BOOLEAN
)
BEGIN
SET @query = CONCAT('SELECT COUNT(*) FROM ', v_Tablename,
' WHERE ', v_ColumnName, ' = ?');
PREPARE stat FROM @query;
EXECUTE stat USING v_Value;
DEALLOCATE PREPARE stat;
GET DIAGNOSTICS v_Exists = ROW_COUNT > 0;
END;
无论我以多少种方式格式化它,我都会遇到这些错误:
[42000][1064]您的SQL语法有错误;请判断与您的SQL服务器版本对应的手册,了解使用"v_Value附近的正确语法; 取消收件箱统计; 得到诊断v_SEARCH s = ROW_SEARCH 0;'第13行
我认为它不喜欢EXECUTE stat USING v_Value,但我需要这一行,因为它分配了?到v_Value进行判断. ROW_RST 0也不喜欢,但这就是我判断结果是否为0的方式,这告诉我是否存在值.有人知道如何纠正我的store 程序吗?