1

Oracle のフィールドからコンマ区切りの値のリストを作成しようとしています。

これを行うサンプルコードをいくつか見つけました:

DECLARE @List VARCHAR(5000)
SELECT @List = COALESCE(@List + ', ' + Display, Display)
FROM TestTable
Order By Display

しかし、それを試みると、FROMキーワードが予期されていなかったというエラーが常に発生します。使用できSELECT INTO、動作しますが、複数の行がある場合、フェッチ エラーが発生します。

次のようにできないのはなぜですか:

SELECT myVar = Field1
FROM myTable
4

3 に答える 3

7

Oracle では、Tim Hall がこのページで収集した多くの文字列集計手法の 1 つを使用します。

11.2 を使用している場合は、

SELECT LISTAGG(display, ',') WITHIN GROUP (ORDER BY display) AS employees
  INTO l_list
  FROM TestTable

以前のバージョンでは、私の好みは、ユーザー定義の集計関数アプローチ (Tim が呼び出されstring_aggます) を使用して行うことです。

SELECT string_agg( display )
  INTO l_list
  FROM TestTable
于 2011-04-28T18:16:50.370 に答える
0

たぶん、DBMS_UTILITY.COMMA_TO_TABLEとTABLE_TO_COMMAを試してcsvを分割/結合してください。

DECLARE
  l_list1   VARCHAR2(50) := 'Tom,Dick,Harry,William';
  l_list2   VARCHAR2(50);
  l_tablen  BINARY_INTEGER;
  l_tab     DBMS_UTILITY.uncl_array;
BEGIN
  DBMS_OUTPUT.put_line('l_list1 : ' || l_list1);

  DBMS_UTILITY.comma_to_table (
     list   => l_list1,
     tablen => l_tablen,
     tab    => l_tab);

  FOR i IN 1 .. l_tablen LOOP
    DBMS_OUTPUT.put_line(i || ' : ' || l_tab(i));
  END LOOP;

  DBMS_UTILITY.table_to_comma (
     tab    => l_tab,
     tablen => l_tablen,
     list   => l_list2);

  DBMS_OUTPUT.put_line('l_list2 : ' || l_list2);
END;
于 2011-04-29T11:31:09.303 に答える
-1

何らかの方法で連結しない限り、複数の値を単一の変数に挿入することはできません。

単一の値のみを取得するには (オラクルの構文がわからない場合)、

select @myVar = myTable から上位 1 つの Field1 を選択

それ以外の場合は、値を連結します (繰り返しますが、Oracle についてはわかりません)。

set @myVar = '' -- NULL を取り除く
select @myVar = @MyVar + ', ' + Field1 From myTable
于 2011-04-28T17:42:52.087 に答える