【发布时间】:2019-10-24 21:32:04
【问题描述】:
我正在将许多 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