sql >> データベース >  >> RDS >> Oracle

Oracle:文字列の連結が長すぎます

    COLLECT()> 機能 文字列をコレクションに集約し、ユーザー定義関数を使用して文字列を連結するには:

    Oracleセットアップ

    CREATE TYPE stringlist IS TABLE OF VARCHAR2(4000);
    /
    
    CREATE FUNCTION concat_List(
      strings IN stringlist,
      delim   IN VARCHAR2 DEFAULT ','
    ) RETURN CLOB DETERMINISTIC
    IS
      value CLOB;
      i     PLS_INTEGER;
    BEGIN
      IF strings IS NULL THEN
        RETURN NULL;
      END IF;
      value := EMPTY_CLOB();
      IF strings IS NOT EMPTY THEN
        i := strings.FIRST;
        LOOP
          IF i > strings.FIRST AND delim IS NOT NULL THEN
            value := value || delim;
          END IF;
          value := value || strings(i);
          EXIT WHEN i = strings.LAST;
          i := strings.NEXT(i);
        END LOOP;
      END IF;
      RETURN value;
    END;
    /
    

    クエリ

    SELECT Iav.Item_Id AS Attr_Item_Id,
           CONCAT_LIST(
             CAST(
               COLLECT(
                 La.Attribute_Name || '|~|' || Lav.Attribute_Value ||' '|| Lau.Attribute_Uom
                 ORDER BY ICA.DISP_SEQ,LA.ATTRIBUTE_NAME
               )
               AS stringlist
             ),
             '}~}'
           ) AS ATTR
    FROM   your_table
    GROUP BY iav.item_id;
    


    1. 正規表現またはLIKEパターンのエスケープ関数

    2. groupbyで更新

    3. スコアの合計に基づいてランク付けするPHPMYSQLランキングクエリの取得

    4. Java文字列-mysqlから他の言語の文字を取得しています-データは完全ですか?