Oracle apex 如何通过函数返回多个值

Oracle apex 如何通过函数返回多个值,oracle-apex,oracle-apex-5,oracle-apex-5.1,Oracle Apex,Oracle Apex 5,Oracle Apex 5.1,我已经创建了下面的函数,它将返回loggedin用户有权访问的工作区详细信息 但此函数仅返回选择列表中的第一条记录 我需要将所有记录显示为输出 请修改它并让我知道 CREATE OR REPLACE FUNCTION "F_WORKSPACE_LOGIN_USERS" ( p_email VARCHAR2 ) RETURN VARCHAR2 IS l_error VARCHAR2(1000); l_workspace VARCHAR2(1000); l_team

我已经创建了下面的函数,它将返回loggedin用户有权访问的工作区详细信息

但此函数仅返回选择列表中的第一条记录

我需要将所有记录显示为输出

请修改它并让我知道

CREATE OR REPLACE FUNCTION "F_WORKSPACE_LOGIN_USERS" (
  p_email VARCHAR2
) RETURN VARCHAR2 IS

  l_error       VARCHAR2(1000);
  l_workspace   VARCHAR2(1000);
  l_teams       VARCHAR2(1000);
  l_team        VARCHAR2(1000);
BEGIN
  FOR i IN ( SELECT a.name workspace,
                    a.team_id id
             FROM slackdatawarehouse.teams a,
                  ( SELECT TRIM(workspaces) workspaces
                    FROM alluser_workspaces_fact
                    WHERE lower(email) = lower(p_email)
  ) b
             WHERE a.team_id IN ( SELECT c.team_id
                                  FROM slackdatawarehouse.team_tokens c
  )
                   OR   instr(', '
  || lower(b.workspaces),', '
  || lower(a.name) ) > 0
  ORDER BY 1 ) LOOP
    l_teams := l_team
    || ','
    || i.id;
    l_teams := ltrim(rtrim(l_teams,','),',');
    RETURN l_teams;
  END LOOP;
END;
电流输出为:

T6HPQ5LF7
T6XBXVAA1
T905JLZ62
T6HPQ5LF7、T6XBXVAA1、T905JLZ62、T7CN08JPQ、T9MV4732M、T5PGS72NA、T5A4YHMUH、TAAFTFS0P、T69BE9T2A、T85D2D8MT、T858U7SF4、T9D16DF5X、T9DHDV61G、T9D17RDT3、T5Y03HDQ8、T5F5QPRK7

所需输出为:

T6HPQ5LF7
T6XBXVAA1
T905JLZ62

我需要像上面那样一个接一个地输出

我不知道代码真正做了什么,也无法测试它,但这可能是罪魁祸首:

    ...
    RETURN l_teams;    
  END LOOP;
一旦代码到达RETURN语句,它就会退出循环并。。。返回L_TEAMS变量中当前的值。因此,将返回移出循环:

     ...
  END LOOP;
  RETURN l_teams;    
如果它仍然不能像预期的那样工作(可能是这种情况),请看一看流水线函数,例如,在上,因为它们被设计为返回您似乎正在寻找的值

一个简单的例子:

SQL> create or replace type t_dp_row as object
  2    (deptno number,
  3     dname  varchar2(20));
  4  /

Type created.

SQL> create or replace type t_dp_tab is table of t_dp_row;
  2  /

Type created.

SQL> create or replace function f_depts
  2    return t_dp_tab pipelined
  3  is
  4  begin
  5    for cur_r in (select deptno, dname from dept)
  6    loop
  7      pipe row(t_dp_row(cur_r.deptno, cur_r.dname));
  8    end loop;
  9    return;
 10  end;
 11  /

Function created.

SQL> select * from table(f_depts);

    DEPTNO DNAME
---------- --------------------
        10 ACCOUNTING
        20 RESEARCH
        30 SALES
        40 OPERATIONS

SQL>

是的,我可以使用这个,但是你能不能在不使用游标的情况下给出一些ex,但是有点混乱,我还尝试将retuen语句放在循环之外,然后也不起作用。我使用管道时出错[不支持的数据类型]创建或替换函数F_工作区\登录\用户p_电子邮件varchar2返回t_dp_选项卡管道化为l_错误varchar21000;l_工作区varchar21000;从a.name workspace中的i开始,从slackdatawarehouse.teams中选择a.team_id,从slackdatawarehouse.teams中选择a.team_id,从slackdatawarehouse.team_id,从slackdatawarehouse.team_令牌c或instr','| lowerb.WORKSPACES',','| lowera.name>0 order by 1 loop pipe rowt dp_rowi.id;端环;回来终止现在我得到的输出是asT6HPQ5LF7、T6XBXVAA1、T905JLZ62、T7CN08JPQ、T9MV4732M、T5PGS72NA、T5A4YHMUH、TAAFTFS0P、T69BE9T2A、T85D2D8MT、T858U7SF4、T9D16DF5X、T9DHDV61G、T9D17RDT3、T5Y03HDQ8、T5F5QPRK7,但我需要的输出应该是一个接一个,如果你想知道的话,请在每行末尾连接CHR10。