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関数でこれができると思いますが、正確にはわかりません。Oracle10gを使用しています。

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

Oracle のバージョンに応じて、これを行うさまざまな方法について、 Tim Hall によるこのブログ投稿を参照してください。

于 2012-06-12T14:22:40.657 に答える