2016-11-04 12 views
0

Oracle関数では、ファイルに書き出される部分を含むCLOBを返そうとしています。 私はselectステートメントから行を取り出し、値を入力する必要があります(これを行うにはLPADの使い方が分かります)。Oracle:固定長ファイル形式の出力を変数に保存

したがって、テーブルが次のようになっているとします。

col1 col2 col3 
this is data 
and a  gain 
b   b 

そして私は、私の関数を使用して、それを実行します。

FUNCTION create_file_section() RETURN CLOB IS 
BEGIN 

    --SELECT col1, col2, col3 values from table and LPAD them and concat them together, 

END; 

私は(私は4文字になるようにパッドにしたいと仮定した場合)のような出力を得るだろう:

this00isdata 
0and000again 
000b0000000b 
+0

もしあなたがどのようにlpadを知っていたら、あなたの質問は何ですか?表の各行を持つ単一のCLOBをCLOB内の別の行として使用しますか?各行の最大長はどれくらいですか? –

答えて

1

パディングされた各行が4000文字未満であると仮定すると、パディングと連結をクエリの一部として実行できます。次に、結果セットをループし、各行をCLOBに追加する必要があります。何かのように:

FUNCTION create_file_section() RETURN CLOB IS 
    l_clob CLOB; 
BEGIN 
    dbms_lob.createtemporay(l_clob, false); 
    for r in (
    select lpad(col1, 4, '0') || lpad(col2, 4, '0') 
     || lpad(col3, 4, '0') || chr(10) as values 
    from your_table 
) 
    loop 
    dbms_lob.append(l_clob, r.values); 
    end loop; 

    return l_clob; 
END create_file_section; 
/

私は、連結値の改行文字を含めましたが、あなたが好む場合は、代わりにAPPENDでそれを行うことができます。プラットフォームによっては、キャリッジリターンが必要な場合もあります。

これをファイルに書き込んで中間点のCLOBに入れる必要がない場合は、おそらく問合せから直接ループ内のファイルに書き込む方が簡単です。 utl_file.new_line経由で、プラットフォーム固有の行終端文字を自動的に取得することもできます。

関連する問題