用于行 mod 3 的 PL/pgSQL 游标

Posted

技术标签:

【中文标题】用于行 mod 3 的 PL/pgSQL 游标【英文标题】:PL/pgSQL Cursor for rows mod 3 【发布时间】:2016-04-20 23:20:07 【问题描述】:

所以我在 PL/pgSQL 中工作,我想创建一个函数,它只返回 row%3=0 行中的数据,我需要使用游标。

我有以下,但显然不工作

create or replace function punto6() returns void AS $$
declare
    rPers personas%ROWTYPE;             
    curs3   CURSOR  IS  select * from personas order by nombres;
BEGIN   
        FOR rPers   IN  curs3   LOOP
        if current of curs3 % 3 =0  THEN
            RAISE   NOTICE  ''Nombre:   %   %'',    rPers.nombres,  
            rPers.apellidos;
        END LOOP;                           
        return;         
end;
$$  LANGUAGE plpgsql;   

【问题讨论】:

真的很遗憾你需要使用光标,因为有更好的方法来做到这一点。 【参考方案1】:
create or replace function punto6() returns void AS $$
declare
    rPers RECORD;               
    curs3   CURSOR  IS  select * from personas order by nombres;
    numero int;
BEGIN
    numero = 1;
    OPEN curs3;
    LOOP
    FETCH curs3 INTO rPers;
    EXIT WHEN NOT FOUND;
    if numero % 3 = 0   THEN
        RAISE   NOTICE  'Nombre:    %   %', rPers.nombres,  
        rPers.apellidos;
    END IF;
    numero = numero + 1;
    END LOOP;
    CLOSE curs3;
    return;         
end;
$$  LANGUAGE plpgsql;

【讨论】:

以上是关于用于行 mod 3 的 PL/pgSQL 游标的主要内容,如果未能解决你的问题,请参考以下文章

关于 Pl/pgsql 中游标的一些错误

游标可以在 PL/pgSQL 中保存变量吗?

PL/pgSQL 中 PL/SQL %NOTFOUND 的等价物是啥?

PL/pgSQL 代码的问题

PL/pgSQL 中的光标

02-PostgreSQL 存储过程的进阶介绍(含游标错误处理自定义函数事务)