【发布时间】:2017-07-17 03:05:40
【问题描述】:
我正在使用 Oracle 11gR2 PL/SQL 表(嵌套表),但对以下两种方法是否达到相同的结果有点困惑,即:
假设我定义了以下类型:
type member_nos_type is table of varchar2(32000);
以及以下示例表定义/数据:
table: my_members
id number not null,
membernos varchar2(30) not null,
first_nm varchar2(255),
surname varchar2(255)
Sample data in table my_members:
1 111111 Joe Smith
2 222222 Sam Smith
3 333333 Jane Smith
4 444444 Jason Smith
5 555555 Joel Smith
然后在一个过程中,我有以下代码:
procedure a1 (p_param1 in varchar2) is
v_member_list member_nos_type;
begin
if p_param1 = 'BASKETBALL' then
v_member_list := member_nos_type ('222222','444444');
end if;
end;
----------------------------
procedure b2 (p_param1 in varchar2) is
v_member_list member_nos_type;
begin
if p_param1 = 'BASKETBALL' then
v_member_list := member_nos_type (
SELECT LISTAGG(membernos, ',') WITHIN GROUP (ORDER BY membernos)
FROM my_members
WHERE id in (2,4));
end if;
end;
基于上面的procedure a1和procedure b2,最终结果是不是varchar2类型的成员编号表?
更新
如何根据 my_members 表中的 membernos 列数据返回 TRUE 嵌套表?
【问题讨论】:
-
你没有运行它吗? LISTAGG 返回 varchar2 - docs.oracle.com/cd/E11882_01/server.112/e41084/…
-
Procedure
a1是真正的嵌套表类型,而第二个过程使用 LISTAGG 返回一个字符串,只是值用逗号分隔。 -
好吧,正如我所怀疑的那样。有人可以帮助我如何返回一个真正的嵌套表,就像我尝试使用基于 my_members 表中的 membernos 列数据的 LISTAGG 函数一样?
-
请显示一些示例预期输出,因为不清楚您要做什么。这里到底“嵌套”了什么?我没有看到任何层次结构。