PostgreSQL:为什么子查询不能作为表达式返回多行,但函数可以吗
发布时间:2020-12-13 16:31:00 所属栏目:百科 来源:网络整理
导读:如果我尝试创建一个值为select的返回多行的列,则会出现错误. = select (select 1 union select 2);ERROR: more than one row returned by a subquery used as an expression 但是如果我创建一个执行相同操作的函数,我会得到我想要的行为. = create or replac
如果我尝试创建一个值为select的返回多行的列,则会出现错误.
=> select (select 1 union select 2); ERROR: more than one row returned by a subquery used as an expression 但是如果我创建一个执行相同操作的函数,我会得到我想要的行为. => create or replace function onetwo() returns setof integer as $$ $> select 1 union select 2 $> $$language 'sql' strict immutable; CREATE FUNCTION => select onetwo(); onetwo -------- 1 2 为什么不同?
虽然OMG Ponies的回答是完全正确的,但我宁愿这样说:你把SELECT f()与SELECT文字混淆了.
> SELECT f()执行一个函数并返回其结果.并且,表返回函数也可以写为SELECT * FROM f() – 这更加优雅.因为Pg还没有存储过程 – 可以通过函数完成更少的调度 – 我们使用SELECT,因为Microsoft SQL使用EXECUTE> SELECT LITERAL是一种返回文字的方法(可以放在行/列中的东西). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |