sql函数踩坑——返回值跟独立执行查询语句结果不符
今天使用sql语言格式创建的函数执行查询一直获取不到想要的结果,函数是这样创建的:
一开始我想会不会是我查询语句写错了,于是我单独执行了一下发现结果是正确的。
这就排除了sql本身的错误,再排除当前数据库的环境问题,那只能是创建的时候函数语法发生了错误。这时我发现在数据库连接工具中sql所有颜色区分的,其中state明显是sql语法内置的关键词,那我更改一下参数的名字:
结果就返回正确了,那么问题真的是这样的吗?我再次观察,发现并不是这样的,真正的原因是我使用的参数名和数据表字段一样,导致where state=state恒等于,直接返回第一条数据
如上图,期望得到的值为2,但是返回值为4就是因为使用了数据表字段导致where失效。
因此创建sql函数时,为了避免未知的错误,请勿与sql内置关键词和查询的数据表字段名重名。