1

我已经定义了一个表类型 PL/SQL 变量并在那里添加了一些数据。

create or replace type varTableType as table of varchar2(32767);
my_table varTableType := varTableType()
...
my_table := some_function();

现在我有了这个my_table包含数千条记录的表类型变量。我必须只选择那些以特定字符结尾的记录,比如“a”并以逗号分隔的字符串获得结果。我认为 COLLECT 函数可以做到这一点,但我不明白究竟如何。我正在使用 Oracle 10g。

4

2 回答 2

4

无需进入问题 - 为什么使用表类型而不是表(或临时表),您可以这样做:

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;

有更多的方法来连接行 - WM_CONCAT(如果启用)或LISTAGG(自 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;
于 2012-06-12T14:11:43.560 回答
1

有关执行此操作的多种方法,请参阅 Tim Hall 的这篇博客文章,具体取决于 Oracle 版本。

于 2012-06-12T14:22:40.657 回答