我正在将许多MySQL查询从在Node.js应用程序中的硬编码迁移到存储过程(供Java应用程序使用)。在原始的Node应用程序中,有一个SQL条件保存为常量字符串,并作为where子句的一部分替换为许多不同的SQL函数,而我无法弄清楚如何使用MySQL存储函数来完成相同的事情。
常量是一个SQL字符串,用于检查用户对象上的各种属性是否为空:
const USER_INFO_NOT_NULL = `u.id IS NOT NULL \
AND u.email IS NOT NULL \
AND u.gender IS NOT NULL \
AND u.date_of_birth IS NOT NULL \
AND u.first_name IS NOT NULL \
AND u.last_name IS NOT NULL`
此SQL语句被替换为许多不同的查询,作为其WHERE
语句中的条件之一。
例如:
SELECT COUNT(*) count
FROM User u
WHERE ${USER_INFO_NOT_NULL}
AND some_other_condition
AND another_condition
...
不幸的是,并非所有查询都像上面的查询那样简单,重写每个查询将需要大量的工作。
我已经尝试过使用存储的函数,但是,存储的函数只能将标量值用作参数,因此无法传递用户行。
我还尝试让该函数获取用户ID(由于查询已经查询了该用户,因此不理想),查询该用户并根据上述条件返回一个布尔值。但是,我不确定如何在存储的函数中将SELECT
与RETURN
合并(可以执行此操作吗?)。
我研究了准备好的语句,但是,它们似乎不以这种方式工作,因为它们仅支持有限数量的SQL命令。
因此,是否有一种方法可以仅使用MySQL功能来做与Node.js应用程序中已经存在的相似的事情?
我正在将许多MySQL查询从在Node.js应用程序中的硬编码迁移到存储过程(供Java应用程序使用)。在原始的Node应用程序中,有一个SQL条件保存为常量字符串...
您可以定义视图。