2017-05-10 15 views
0

おはようございます、私はcsvファイルからテーブルにデータを読み込むことを何度か試みてきましたが、新しいディレクトリを作成する権限がある場合は、オブジェクト。テーブルにcsvファイルをロードする方法

UTL_FILEと外部表の両方でローカルに行いましたが、特別な権限が必要です。

しかし、私はオンラインでやろうとしたときに私はそれらの特権を持っていないことを知ったので、私はそれらなしでそれを行う方法があるかどうか調べたいと思います。

ありがとうございました!

PS:二つのアプローチは次のとおりです。UTL_FILE WITH

CREATE TABLE TEST 
(
    A varchar2(25); 
    B number; 
) 

PROCEDURE load AS 
    F UTL_FILE.FILE_TYPE; 
    V_LINE VARCHAR2(4000); 
    v_A varchar2(25); 
    v_B number; 

BEGIN 
    F := UTL_FILE.FOPEN (<directory>, '<csv file>', 'r'); 
    IF UTL_FILE.IS_OPEN(F) THEN 
     LOOP 
      BEGIN 
       UTL_FILE.GET_LINE(F, V_LINE, 1000); 

       IF V_LINE IS NULL THEN 
        EXIT; 
       END IF; 

       v_A := REGEXP_SUBSTR(V_LINE, '[^;]+', 1, 1); 
       v_B := REGEXP_SUBSTR(V_LINE, '[^;]+', 1, 2); 

       INSERT INTO test(v_A, v_B); 
       COMMIT; 
      EXCEPTION 
       WHEN NO_DATA_FOUND THEN 
        EXIT; 
      END; 
     END LOOP; 
    END IF; 

    UTL_FILE.FCLOSE(F); 
END load; 

CREATE TABLE testload 
( 
    A VARCHAR2(25) 
    B number 
) 
ORGANIZATION EXTERNAL 
(TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY "PRUEBAS" 
    ACCESS PARAMETERS 
    (records delimited by newline 
    fields terminated by ';' 
) 
    LOCATION 
    ('Log_CSV_REND_SICTG_20170507.csv' 
) 
) 
REJECT LIMIT UNLIMITED ; 
を有する外部テーブル

PROCEDURE loadcsv AS 
    A varchar2(25); 
    B number; 

BEGIN 
    INSERT INTO test select * testload; 
    COMMIT; 
END loadcsv; 

WITH

+0

あなたは必要な権限なしでテーブルにデータを追加することができた場合は、何がそう何あなたが –

+0

できない私は、テーブルにデータを追加することができますが、私ドン、セキュリティ上の脆弱性/ハッキングを悪用されることはありませんディレクトリオブジェクトを作成するのに十分な特権を持っていません –

+1

私はあなたの質問を引用しています "*書き込み権限が必要ですが、オンラインでやりたいときに私はそれらの権限を持っていないことを知りました。彼らなしでそれをする方法があるかどうかを調べる。* " - それは私のコメントを支持する。しかし、そうでない場合は、質問を明確にするために言い直す必要があります。 –

答えて

1

SQL Loaderを使用してロードしてみてください。それは使いやすく、非常に高速です。データのロード方法を記述し、ロードしようとしているテーブルと同じ構造を持つ必要がある制御ファイルを作成する必要があります。あなたの場合は、このように見えるかもしれません。

LOAD DATA 
INFILE <yourfilepath> 
APPEND INTO TABLE TEST 
FIELDS TERMINATED BY ',' 
(
    A, 
    B 
) 

そして

test.ctl、コマンドラインから。

host sqlldr username/password control=youfolder\test.ctl 
log=yourfolder\test.log 
関連する問題