PostgreSQL中SELECT...FROM...INTO与标准SELECT...INTO...FROM有何差异?
PostgreSQL中两种SELECT INTO赋值语法的差异结论
两种写法在PL/pgSQL函数环境下不存在功能层面的显著差异,执行逻辑、返回结果完全一致。
具体说明
- 你使用的
SELECT ... FROM ... INTO 变量语序,是PL/pgSQL解析器原生支持的宽松语法,不属于语法错误,也不是仅MySQL旧版本才支持的特殊写法。 - 常规教程、标准SQL定义里的
SELECT ... INTO 变量 FROM ...语序是正式规范写法,也是官方文档示例主要采用的写法。 - PL/pgSQL解析器在处理过程块内的SELECT赋值语句时,不会强制要求INTO子句必须紧跟SELECT列列表之后:你可以把INTO子句放在语句末尾、ORDER BY子句之前、甚至HAVING子句之后,解析器都能正确识别赋值目标,不会出现取值错误。
以下两种写法在函数中执行效果完全相同:-- 标准规范写法 SELECT salary INTO base_salary FROM employees WHERE emp_id = current_emp_id; -- 你使用的INTO后置写法 SELECT salary FROM employees WHERE emp_id = current_emp_id INTO base_salary;
使用注意事项
- 该宽松语法仅在PL/pgSQL等PostgreSQL内置过程语言的代码块内生效,如果在普通SQL交互环境直接执行SELECT INTO语句,必须使用标准语序,否则会触发语法错误。
- 生产环境不推荐使用INTO后置的非标准写法:一方面可读性差,其他熟悉标准SQL语法的开发者很难第一时间识别到这是变量赋值操作;另一方面跨数据库兼容性差,后续如果迁移到其他数据库,非标准语序会直接执行失败。
- 你在官方文档中没找到对应语序说明,是因为官方仅将INTO的标准位置作为正式语法规则记录,灵活放置INTO属于解析器做的兼容实现,没有单独作为正式语法条目公示。
内容的提问来源于stack exchange,提问作者Roberto Espinoza
相关产品推荐
相关产品推荐

