2017-11-01 13 views
0

私はasktomとthatjeffsmithを見てきましたが、このサイトではまだわかりません。それは私がそれを使用している他のツールでb/cを混乱させるのは非常に簡単です。単一テーブルをcsvファイル、構文、SQL Developerとしてエクスポートします。

データベース(Oracle)のデータから小さなテーブルを作成するスクリプトがあります。作成したテーブルをcsvファイルとしてエクスポートするスクリプトの最後に構文を含めたいと思います。ストアドプロシージャなどのスクリプトとは対照的に、スクリプトの最後にこれを使用することをお勧めします.c /vcファイルを保存する場所を頻繁に変更する必要があります。私は行か2で、R、SPSS、STATA、SASでこれを行うことができます

SELECT /*csv*/ * 
FROM table_name 
EXPORT/OUTPUT/SAVE TO filepath.csv 

:よう

何か。それが私が探しているものです。私はフォーマット、引用符、ヘッダー、または区切り文字を指定する必要があるかもしれないと思うが、SELECTステートメントにcsv修飾子が与えられているかどうかわからない。私はこれが2日目のような感じですが、何らかの理由で簡単な答えを見つけることができません。

ありがとうございます。

+0

https://stackoverflow.com/questions/2235358/script-output-to-file-when-using-sql-developer? – xQbert

+0

また、https://stackoverflow.com/questions/643137/とhttps://stackoverflow.com/questions/4168398/ – kfinity

答えて

0

CREATE OR REPLACE PACKAGE APPS.csv AS 

PROCEDURE generate (p_dir  IN VARCHAR2, 
        p_file  IN VARCHAR2, 
        p_query  IN VARCHAR2); 

PROCEDURE generate_rc (p_dir  IN VARCHAR2, 
         p_file  IN VARCHAR2, 
         p_refcursor IN OUT SYS_REFCURSOR); 

PROCEDURE set_separator (p_sep IN VARCHAR2); 

END csv; 
/

CREATE OR REPLACE PACKAGE BODY APPS.csv AS 


g_sep   VARCHAR2(5) := ','; 

-- Prototype for hidden procedure. 
PROCEDURE generate_all (p_dir  IN VARCHAR2, 
         p_file  IN VARCHAR2, 
         p_query  IN VARCHAR2, 
         p_refcursor IN OUT SYS_REFCURSOR); 


-- Stub to generate a CSV from a query. 
PROCEDURE generate (p_dir  IN VARCHAR2, 
        p_file  IN VARCHAR2, 
        p_query  IN VARCHAR2) AS 
    l_cursor SYS_REFCURSOR; 
BEGIN 
    generate_all (p_dir  => p_dir, 
       p_file  => p_file, 
       p_query  => p_query, 
       p_refcursor => l_cursor); 
END generate; 


-- Stub to generate a CVS from a REF CURSOR. 
PROCEDURE generate_rc (p_dir  IN VARCHAR2, 
         p_file  IN VARCHAR2, 
         p_refcursor IN OUT SYS_REFCURSOR) AS 
BEGIN 
    generate_all (p_dir  => p_dir, 
       p_file  => p_file, 
       p_query  => NULL, 
       p_refcursor => p_refcursor); 
END generate_rc; 


-- Do the actual work. 
PROCEDURE generate_all (p_dir  IN VARCHAR2, 
         p_file  IN VARCHAR2, 
         p_query  IN VARCHAR2, 
         p_refcursor IN OUT SYS_REFCURSOR) AS 
    l_cursor PLS_INTEGER; 
    l_rows  PLS_INTEGER; 
    l_col_cnt PLS_INTEGER; 
    l_desc_tab DBMS_SQL.desc_tab; 
    l_buffer VARCHAR2(32767); 

    l_file  UTL_FILE.file_type; 
BEGIN 
    IF p_query IS NOT NULL THEN 
    l_cursor := DBMS_SQL.open_cursor; 
    DBMS_SQL.parse(l_cursor, p_query, DBMS_SQL.native); 
    ELSIF p_refcursor%ISOPEN THEN 
    l_cursor := DBMS_SQL.to_cursor_number(p_refcursor); 
    ELSE 
    RAISE_APPLICATION_ERROR(-20000, 'You must specify a query or a REF CURSOR.'); 
    END IF; 

    DBMS_SQL.describe_columns (l_cursor, l_col_cnt, l_desc_tab); 

    FOR i IN 1 .. l_col_cnt LOOP 
    DBMS_SQL.define_column(l_cursor, i, l_buffer, 32767); 
    END LOOP; 

    IF p_query IS NOT NULL THEN 
    l_rows := DBMS_SQL.execute(l_cursor); 
    END IF; 

    l_file := UTL_FILE.fopen(p_dir, p_file, 'w', 32767); 

    -- Output the column names. 
    FOR i IN 1 .. l_col_cnt LOOP 
    IF i > 1 THEN 
     UTL_FILE.put(l_file, g_sep); 
    END IF; 
    UTL_FILE.put(l_file, l_desc_tab(i).col_name); 
    END LOOP; 
    UTL_FILE.new_line(l_file); 

    -- Output the data. 
    LOOP 
    EXIT WHEN DBMS_SQL.fetch_rows(l_cursor) = 0; 

    FOR i IN 1 .. l_col_cnt LOOP 
     IF i > 1 THEN 
     UTL_FILE.put(l_file, g_sep); 
     END IF; 

     DBMS_SQL.COLUMN_VALUE(l_cursor, i, l_buffer); 
     UTL_FILE.put(l_file, l_buffer); 
    END LOOP; 
    UTL_FILE.new_line(l_file); 
    END LOOP; 

    UTL_FILE.fclose(l_file); 
    DBMS_SQL.close_cursor(l_cursor); 
EXCEPTION 
    WHEN OTHERS THEN 
    IF UTL_FILE.is_open(l_file) THEN 
     UTL_FILE.fclose(l_file); 
    END IF; 
    IF DBMS_SQL.is_open(l_cursor) THEN 
     DBMS_SQL.close_cursor(l_cursor); 
    END IF; 
    DBMS_OUTPUT.put_line('ERROR: ' || DBMS_UTILITY.format_error_backtrace); 
    RAISE; 
END generate_all; 


-- Alter separator from default. 
PROCEDURE set_separator (p_sep IN VARCHAR2) AS 
BEGIN 
    g_sep := p_sep; 
END set_separator; 

END csv; 
/

が所望の位置これはようである

+0

私は助けに感謝しますが、私はプログラマーではない、これは文字通り私にギリシャ語です。ありがとう、結構です。 –

+0

sqlplusを開き、コードの最初のセクションを実行し、2番目のセクションを実行すると、dbユーザー名でscottを置き換え、最終的に 'select * from emp 'を抽出するテーブルに置き換えて最後の行を実行しますas csv – user7788127

0

でcsvファイルに表データを抽出するために、この

CREATE OR REPLACE DIRECTORY EXTRACT_DIR AS 'c:\oracle\extract'; 
GRANT READ, WRITE ON DIRECTORY EXTRACT_DIR TO SCOTT; 
GRANT EXECUTE ON UTL_FILE TO SCOTT; 


EXEC csv.generate('EXTRACT_DIR', 'emp.csv', p_query => 'SELECT * FROM emp'); 

希望などのデータベースでこのヘルプをディレクトリを作成するには、以下のようなパッケージを作成します。私自身の質問に答えることができるように近くに。

SET FEEDBACK OFF 
SELECT /*csv*/ 
    var1, var2, var3...varX 
FROM 
    tablename; 

ランオラクル内のスクリプト(F5)として、それが出力内側任意のメモやドキュメントを生成することなく、csv形式でスクリプトの出力を生成します。そこから、小さなディスクのアイコンをクリックし、「すべてのファイル」として保存し、ファイル名の最後に.csv拡張子を追加します。

... locationYにformatXというクエリまたはスクリプトの結果を出力する構文の2-3行のスニペットがないのはかなり驚きです。しかし、私はそこにないと思います。

コメントを投稿していただきありがとうございます。

関連する問題