加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PL / pgSQL函数:如何使用execute语句返回表

发布时间:2020-12-13 16:28:21 所属栏目:百科 来源:网络整理
导读:我有这个PL / pgSQL函数,它必须返回一些用户的信息. CREATE OR REPLACE FUNCTION my_function(user_id integer) RETURNS TABLE(id integer,firstname character varying,lastname character varying) AS$$DECLARE ids character varying;BEGIN ids := ''; --
我有这个PL / pgSQL函数,它必须返回一些用户的信息.
CREATE OR REPLACE FUNCTION my_function(user_id integer)
  RETURNS TABLE(id integer,firstname character varying,lastname  character varying) AS
$$
DECLARE
    ids character varying;
BEGIN
    ids := '';

    --Some code which build the ids string,not interesting for this issue

    RETURN QUERY EXECUTE 'SELECT users.id,users.firstname,users.lastname
    FROM public.users WHERE ids IN (' || ids || ')';
END;
$$LANGUAGE plpgsql;

我所面临的问题是函数的结果是单列表,如下所示:

╔═══╦═════════════════════╗
║   ║my_function          ║
╠═══╬═════════════════════╣
║ 1 ║ (106,Ned,STARK)     ║
║ 2 ║ (130,Rob,STARK)     ║
╚═══╩═════════════════════╝

虽然我预计:

╔═══╦════════════╦════════════╦═════════════╗
║   ║ id         ║ firstname  ║ lastname    ║
╠═══╬════════════╬════════════╬═════════════╣
║ 1 ║ 106        ║ Ned        ║ STARK       ║
║ 2 ║ 103        ║ Rob        ║ STARK       ║
╚═══╩════════════╩════════════╩═════════════╝

我想(但不确定)问题来自EXECUTE语句,但我看不到如何做到.

有任何想法吗?

你如何执行这个功能?它作为一个选择语句.
create table public.users (id int,firstname varchar,lastname varchar);

insert into public.users values (1,'aaa','bbb'),(2,'ccc','ddd');

CREATE OR REPLACE FUNCTION my_function(user_id integer) RETURNS TABLE(id integer,lastname character varying) AS $$
DECLARE
    ids INTEGER[];
BEGIN
     ids := ARRAY[1,2];
     RETURN QUERY
         SELECT users.id,users.lastname
         FROM public.users
         WHERE users.id = ANY(ids);
END;
$$LANGUAGE plpgsql;


select * from my_function(1);
 id | firstname | lastname 
----+-----------+----------
  1 | aaa       | bbb
  2 | ccc       | ddd

select id,firstname,lastname from my_function(1);
 id | firstname | lastname 
----+-----------+----------
  1 | aaa       | bbb
  2 | ccc       | ddd

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读