提问人:Itian 提问时间:2/26/2023 最后编辑:Ankit BajpaiItian 更新时间:2/26/2023 访问量:33
改变 SQL 函数和查询的结果 [重复]
Varies result for SQL function and Query [duplicate]
问:
我有一个 SQL 函数,其中包含一个简单的 Select Count 查询,当在 SQL 模式下运行查询时,它会给出正确的结果,而当在函数中使用相同的查询时,结果会有所不同。两种情况都与此处相同;
1.SQL查询
SELECT COUNT(*) FROM responses WHERE batch='2K18' AND degree_program='BSC' ;
2.SQL 函数
BEGIN
DECLARE ResponseCount INTEGER;
SET ResponseCount = (SELECT COUNT(*) FROM responses WHERE batch=BATCH AND degree_program=DEGREEPROGRAM);
RETURN (ResponseCount);
END
SQL 查询的结果是正确的,而在 SQL 函数中使用时,它只检查 where 子句的第二个参数。可能的解决方案是什么。
答:
0赞
Littlefoot
2/26/2023
#1
对我来说,这很可疑:
WHERE batch=BATCH AND degree_program=DEGREEPROGRAM);
-----------
this
怎么会这样?因为您命名的列和参数相同,所以它的计算结果类似于 which is always true,即您根本不过滤第一个参数上的数据。where 1 = 1
另一方面,第二个参数的名称与列名称(其名称中带有下划线)不同。
一般来说,如果您根据最佳实践接受命名约定,并使用前缀 as 或(作为“in”参数)或您认为合适的任何其他参数来命名参数,这是件好事。par_
i_
因此,如果您的查询如下所示
... SET ResponseCount = (SELECT COUNT(*)
FROM responses r
WHERE r.batch = PAR_BATCH
AND r.degree_program = PAR_DEGREE_PROGRAM);
它可能会按您的预期工作。
评论