Postgresql 而游标中的循环未正常工作

Postgresql 而游标中的循环未正常工作,postgresql,Postgresql,我尝试将结果存储在一个变量中并使用coalece。 但它不起作用 do $$ declare v_deptno numeric := 10; stored_empno numeric; curempno cursor is select empno from emp e where e.deptno = v_deptno; recempno record; begin open curempno; fetch curempno into recempno; while found loop

我尝试将结果存储在一个变量中并使用coalece。 但它不起作用

do
$$
declare
v_deptno numeric := 10;
stored_empno numeric;
curempno cursor is select empno from emp e where e.deptno = v_deptno;
recempno record;
begin   
open curempno;
fetch curempno
into recempno;
while found
loop
fetch curempno into recempno;
stored_empno:=recProdTest.empno;
raise info 'empno = %',coalesce(recProdTest.empno, stored_empno);
end loop;
close curempno;
end $$ language plpgsql;
请帮帮我


谢谢。

您的程序逻辑错误,这在Oracle中也不起作用

在第一个
RAISE
之前执行了多少
FETCH
语句?没错,两个:一个在循环前,一个在循环中

因此,您跳过了第一个结果。最后一个
NULL
是因为您没有在
FETCH
RAISE
之间检查
FOUND
,所以您报告了由于光标已完成而得到的空结果

尝试这样的循环:

OPEN curempno;
LOOP
   FETCH curempno INTO recempno;
   EXIT WHEN NOT FOUND;
   RAISE INFO 'empno = %', recempno.empno;
END LOOP;

你为什么要使用(速度慢且效率低)光标?嗨,谢谢你的回复。我已经按照你的建议使用了,但是它给出了783977827934的输出。empno 7839不应出现在输出中。我需要与Oracle中相同的输出。请帮助我。如果您想让bug与Oracle代码兼容,请在开始时重新添加额外的
FETCH
,将最后一个
empno
存储在变量中,然后使用
coalesce(recempno.empno,stored\u empno)
。我在开始时添加了额外的FETCH,并尝试将结果存储在变量中并使用coalece。但它不起作用。我已经编辑了我的帖子。请帮助我。
存储的\u empno:=recProdTest.empno应该在循环之后上移。但整个代码毫无意义。