首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql plpgsql多行循环

Postgresql plpgsql多行循环
EN

Stack Overflow用户
提问于 2015-10-13 19:43:53
回答 2查看 1.6K关注 0票数 0

我正忙于尝试为PostgreSQL数据库重写Informix存储过程,我陷入了对每个了解PostgreSQL的人来说都很明显的事情上。

我的sql脚本如下所示

代码语言:javascript
复制
-- ensure type and function get created
drop type if exists tp_users cascade;
drop function if exists sp_cmplist();

-- create type
create type tp_users as (
    us_id       char(30),
    us_status   char(1)
);

create function sp_cmplist()
    returns tp_users as $$
declare
    lr_users   tp_users;
begin

    for lr_users in
        select users.us_id, users.us_status
        from users
    loop
        return lr_users;
    end loop;

end

$$ language 'plpgsql';

select sp_cmplist();

这只是一个从虚构的users表中选择的虚拟脚本,但是我如何使用这个带有游标或循环的脚本来确保返回所有结果呢?

EN

回答 2

Stack Overflow用户

发布于 2015-10-13 20:23:47

下面的代码可以工作:

代码语言:javascript
复制
CREATE TABLE foo(a int);
INSERT INTO foo VALUES(10),(20);

CREATE OR REPLACE FUNCTION retfoo()
RETURNS SETOF foo AS $$
BEGIN
  RETURN QUERY SELECT * FROM foo;
  RETURN;
END;
$$ LANGUAGE plpgsql;

postgres=# SELECT * FROM retfoo();
┌────┐
│ a  │
├────┤
│ 10 │
│ 20 │
└────┘
(2 rows)

时间: 1.143毫秒

票数 0
EN

Stack Overflow用户

发布于 2015-10-13 20:29:19

我可能已经用以下内容回答了我自己的问题

代码语言:javascript
复制
drop type if exists tp_users cascade;
drop function if exists sp_cmplist();

create type tp_users as (
    us_id        text,
    us_status    text,
    lv_nothing   text,
    lv_cnt       int
);

create function sp_cmplist()
    returns setof tp_users as $$
declare
    lr_users   tp_users;
    lv_cnt     int;
begin

    lv_cnt := 0;

    for lr_users in
        select users.us_id, users.us_status
        from users
    loop

        -- increment this counter for testing purposes
        lv_cnt              := lv_cnt + 1;

        lr_users.lv_nothing := 'yupy';
        lr_users.lv_cnt     := lv_cnt;

        return next lr_users;

    end loop;

    return;

end

$$ language 'plpgsql';

select * from sp_cmplist();

这看起来非常有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33101826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档