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

group by式でCLOB列を作成する方法は?回避策はありますか?

    要件に合わせて使用​​できる構文は次のとおりです:

    構文:

    DBMS_LOB.SUBSTR (lob_loc, amount, offset)
    
    Parameter Description 
    lob_loc: Locator for the LOB to be read i.e CLOB column name. 
    amount: Number of bytes (for BLOBs) or characters (for CLOBs) to be read. 
    offset: Offset in bytes (for BLOBs) or characters (for CLOBs) from the start of the LOB (origin: 1). 
    

    したがって、最終的なクエリは次のようになります。

        SELECT
        Test_Case_Name,
        DBMS_LOB.SUBSTR(Test_Case_Description,2000,1) as Test_Case_Description,
        Test_Case_Status,
    CASE WHEN Test_Case_Status = 'FAILED' THEN
        LISTAGG(LN.LN_BUG_ID,', ') WITHIN GROUP(ORDER BY LN.LN_BUG_ID)
    END AS Defect_ID
    FROM Test LEFT JOIN LINK LN ON
        LN.LN_ENTITY_ID=Test.TS_TEST_ID
    GROUP BY
        Test_Case_Name,
        Test_Case_Description,
        Test_Case_Status
    

    4000文字以降のデータが失われないか心配なので、列を分割して以下のように表示することをお勧めします..

    SELECT
        Test_Case_Name,
        DBMS_LOB.SUBSTR(Test_Case_Description,4000,1) as Test_Case_Description1,
        DBMS_LOB.SUBSTR(Test_Case_Description,8000,4001) as Test_Case_Description2
        Test_Case_Status,
    CASE WHEN Test_Case_Status = 'FAILED' THEN
        LISTAGG(LN.LN_BUG_ID,', ') WITHIN GROUP(ORDER BY LN.LN_BUG_ID)
    END AS Defect_ID
    FROM Test LEFT JOIN LINK LN ON
        LN.LN_ENTITY_ID=Test.TS_TEST_ID
    GROUP BY
        Test_Case_Name,
        Test_Case_Description1,
        Test_Case_Description2,
        Test_Case_Status
    


    1. MySQLトリガーが機能しない、単純な構文、複雑ではない

    2. phpmyadminでクエリの実行を元に戻す方法

    3. 大きなテーブルから重複を削除する

    4. Oracle (11g) 複合トリガーが CLOB データ フィールドを更新しない