循环遍历所有行只返回最后一行

zac*_*cki 0 oracle error-handling plsql return-value oracle-apex

我正在尝试使用此 Plsql 将值返回到 Apex 页面项中。页面项源是 PL/SQL 函数体。

DECLARE
v_val VARCHAR2 (3000 CHAR);
  CURSOR c_mylist
  IS
  select * from table_mylist
  order by id;
  BEGIN
  FOR r_mylist IN c_mylist
  LOOP
   --dbms_output.put_line( c_mylist.item );
   v_val := c_mylist.item ||' '||c_mylist.item;
  END LOOP;
  return v_val;
END;
Run Code Online (Sandbox Code Playgroud)

出乎意料的是,它只将游标的最后一个值返回到页面项中,而不是所有行值。在 SQL Developer 中尝试使用 dbms_output.put_line 显示正确的结果。我的脚本出了什么问题?

Lit*_*oot 5

本来应该

v_val := v_val ||' '||c_mylist.item;
Run Code Online (Sandbox Code Playgroud)

代替

v_val := c_mylist.item ||' '||c_mylist.item;
Run Code Online (Sandbox Code Playgroud)

不过,您可以使用单个select语句,而不是整个 PL/SQL 代码:

declare
  v_val varchar2(3000);
begin
  select listagg(item, ' ') within group (order by id)
    into v_val
    from table_mylist;
  return v_val;
end;
Run Code Online (Sandbox Code Playgroud)