String 如何从Oracle中的PL/SQL表类型返回CSV字符串
我已经定义了一个表类型PL/SQL变量,并在其中添加了一些数据String 如何从Oracle中的PL/SQL表类型返回CSV字符串,string,oracle,types,plsql,collect,String,Oracle,Types,Plsql,Collect,我已经定义了一个表类型PL/SQL变量,并在其中添加了一些数据 create or replace type varTableType as table of varchar2(32767); my_table varTableType := varTableType() ... my_table := some_function(); 现在我有了这个my_tabletable类型变量,它包含数千条记录。 我必须只选择那些以特定字符结尾的记录,比如'a',然后以逗号分隔的字符串获取结果。 我认
create or replace type varTableType as table of varchar2(32767);
my_table varTableType := varTableType()
...
my_table := some_function();
现在我有了这个my_table
table类型变量,它包含数千条记录。
我必须只选择那些以特定字符结尾的记录,比如'a',然后以逗号分隔的字符串获取结果。
我认为COLLECT函数可以做到这一点,但我不清楚具体是如何做到的。
我使用的是Oracle 10g。不用问这个问题-为什么要使用表类型而不是表(或临时表),您可以这样做:
declare
my_table varTableType;
i varchar2(32767);
begin
my_table := new
varTableType('bbbb', 'ccca', 'ddda', 'eee', 'fffa', 'gggg');
select trim(xmlagg(xmlelement(e, column_value || ','))
.extract('//text()'))
into i
from table(my_table)
where column_value like '%a';
dbms_output.put_line(i);
end;
有更多的方法来连接行-(如果启用)或(自11g R2以来),但是
select column_value
from table(my_table)
where column_value like '%a';
停留
没有sql还有另一种方法:
declare
my_table varTableType;
i varchar2(32767);
begin
my_table := new
varTableType('bbbb', 'ccca', 'ddda', 'eee', 'fffa', 'gggg');
FOR j IN my_table.first .. my_table.last LOOP
IF my_table(j) like '%a' THEN
i := i || my_table(j);
END IF;
END LOOP;
dbms_output.put_line(i);
end;
不必回答这个问题-为什么要使用表类型而不是表(或临时表),您可以这样做:
declare
my_table varTableType;
i varchar2(32767);
begin
my_table := new
varTableType('bbbb', 'ccca', 'ddda', 'eee', 'fffa', 'gggg');
select trim(xmlagg(xmlelement(e, column_value || ','))
.extract('//text()'))
into i
from table(my_table)
where column_value like '%a';
dbms_output.put_line(i);
end;
有更多的方法来连接行-(如果启用)或(自11g R2以来),但是
select column_value
from table(my_table)
where column_value like '%a';
停留
没有sql还有另一种方法:
declare
my_table varTableType;
i varchar2(32767);
begin
my_table := new
varTableType('bbbb', 'ccca', 'ddda', 'eee', 'fffa', 'gggg');
FOR j IN my_table.first .. my_table.last LOOP
IF my_table(j) like '%a' THEN
i := i || my_table(j);
END IF;
END LOOP;
dbms_output.put_line(i);
end;
根据Oracle版本的不同,请参阅此部分了解实现此目的的多种方法。根据Oracle版本的不同,请参阅此部分了解实现此目的的多种方法。谢谢,您的示例完美地满足了我的需要。不知怎的,我迷路了,以为所需的解决方案会更复杂。谢谢你,你的例子完美地满足了我的需求。不知怎的,我迷失了方向,认为所需的解决方案会更复杂。