2017-04-25 9 views
0

私はpl SQLを初めて使用していて、ファイル(abc.txt)にパイプで区切られたファイル(列)を読み込もうとしています。以下のようにのように:pl SQLプロシージャから区切られたファイルを読み取る

first test|add|123 
second test|mod|654 

だから私の要件は、我々はPLのSQLプロシージャ内のファイルの上に読むことができますどのように

    よう
  • です。

作業サンプルコードは非常に役に立ちます。

と私は、ファイルの読み込みに使用するコードの下:

set serveroutput on; 

DECLARE 
    V1 VARCHAR2(200); 
    F1 UTL_FILE.FILE_TYPE; 
    V1 VARCHAR2(200); 
    F1 UTL_FILE.FILE_TYPE; 
BEGIN 
    F1 := UTL_FILE.FOPEN('USER_DIR','abc.txt','R'); 

    LOOP 
     BEGIN 
      UTL_FILE.GET_LINE(F1,V1); 
      dbms_output.put_line(V1); 
     EXCEPTION 
      WHEN no_data_found THEN EXIT; 
     END; 
    END LOOP; 

    IF UTL_FILE.IS_OPEN(F1) THEN 
     dbms_output.put_line('File is Open'); 
    end if; 
    UTL_FILE.FCLOSE(F1); 
END; 
/
+0

ファイルを読み取ることができ、変換の束を適用できるETLパッケージを使用する方がよいでしょう。あるいは、あなたがしたいことがあれば、BULK LOADを選択することもできます。 – raunakjhawar

+0

pl SQLプロシージャを使用してみたsql code.iが正常に動作していない場合は、何らかの動作サンプルを提供してください。 – mayur

+0

こんにちはMayur - ファイルから直接データを読み取る場合は、UTL_FILE PL/SQLパッケージを使用できます。また、SQL * Loaderを使用して表にデータをロードしたり、ファイルを外部表として定義したりすることもできます。インターネット上で利用可能なこれらの技術の多くの例があります。 –

答えて

0

は解決策1:sqlloader

  1. 着信データ用のテーブルを作成

  2. あなたの "ロードルール" を定義します。

    Use LOAD DATA 
        infile '/yourappli/utl_file/abc.txt' 
         REPLACE 
         INTO TABLE LOAN_BALANCE_MASTER_INT 
         fields terminated by '|' optionally enclosed by '"' 
         (
         Col_1, 
         Col_2, 
         Col_3 
        ) 
    

解決方法2:コレクションにあなたの区切り文字列のそれぞれを回し

ここでは、ドキュメントのリンクから宣言cto_table機能を使用してコードでどのようにすることができますループトラフあなたの区切り文字列V1、次のとおりです。

DECLARE 
    V1 VARCHAR2(200); 
    F1 UTL_FILE.FILE_TYPE; 
BEGIN 
    F1 := UTL_FILE.FOPEN('USER_DIR','abc.txt','R'); 
    Loop 
    BEGIN 
    UTL_FILE.GET_LINE(F1,V1); 
     for x in ( 
     select column_value a from table(cto_table('|', V1)) 
    ) loop 
     dbms_output.put_line(x.a); 
     end loop; 
    EXCEPTION WHEN No_Data_Found 
    THEN EXIT; 
    END; 
    end loop; 
    IF UTL_FILE.IS_OPEN(F1) THEN 
    dbms_output.put_line('File is Open'); 
    end if; 
    UTL_FILE.FCLOSE(F1); 
END; 
/
関連する問題