2016-07-25 4 views
0

LISTAGGを使用すると結果の文字列を1000文字に制限します。ここで私の結果を作る方法LISTAGGを使用して1000文字の長さを入力します

は、私の例のクエリです:

SELECT LISTAGG(EMPLOYEE_NAME,', ') WITHIN GROUP (ORDER BY EMPLOYEE_NAME) AS NAMES 
FROM TB_EMPLOYEE; 

NAMESサイズは1000の以上の文字であれば、私は唯一の1000文字をしたいし、残りを無視します。 1000文字までの文字列をTRUNCする

+1

現在のクエリが(もっとして4000個の文字を得ることができますか12cで32k)、エラーが発生しましたか?あなたはミドルネームをやめたいのですか?あなたが生産している価値は、非常に役に立つとは思われません。 –

答えて

1

方法です:あなたは、実行時に長さを条件に、EMPLOYEE_NAMEをconacatenating停止する場合

SELECT SUBSTR(LISTAGG(EMPLOYEE_NAME,', ') WITHIN GROUP 
    (ORDER BY EMPLOYEE_NAME), 1, 1000) AS NAMES FROM TB_EMPLOYEE; 

、あなたがあなた自身のPLの\ SQL procを、LISTAGGのconcatsすべてのデータを書き込む必要があります。

さて、単一のクエリで作成したい場合は、これを試してください。まず第一に、すべての連結文字列プラスのための2のカルク全体の長さ「」記号:

SELECT EMPLOYEE_NAME, SUM(LENGTH(EMPLOYEE_NAME)+2) over (ORDER BY EMPLOYEE_NAME) FROM TB_EMPLOYEE; 

は、このサブクエリのためLISTAGGを呼び出す:

SELECT LISTAGG(EMPLOYEE_NAME,', ') WITHIN GROUP 
(ORDER BY EMPLOYEE_NAME) AS NAMES FROM (
    SELECT EMPLOYEE_NAME, SUM(LENGTH(EMPLOYEE_NAME)+2) over 
    (ORDER BY EMPLOYEE_NAME) slide_length FROM TB_EMPLOYEE) 
WHERE slide_length < 1000; 
+0

TB_EMPLOYEEの行の数が限られている場合にのみ有効です。テーブルに1 lakhのレコードが含まれていると、エラーが発生します。 –

関連する問題