2016-04-26 4 views
0

ユーザーが所有者権限を持っている関数、プロシージャ、ビュー、トリガなどのデータベースからすべてのデータをエクスポートします。 SQL Developerには、データベースをSQLファイルにエクスポートするオプションがありますが、コードからこれを実行したいと思います。コードを実行すると、データベースからのすべてのデータを含む必要がある.sql拡張子を持つファイルを作成します。まず第一に、それが可能かどうかを知りたいのですが、もしそうなら、誰も私にこのことをするためのヒントを教えてもらえますか? 私はファイルを作って開始しました:エクスポートデータベース用のPL/SQLスクリプト

CREATE DIRECTORY test_dir AS 'H:\'; 

DECLARE 
    out_File UTL_FILE.FILE_TYPE; 
BEGIN 
    out_File := UTL_FILE.FOPEN('test_dir', 'test.sql' , 'W'); 
    UTL_FILE.PUT_LINE(out_file , 'here will be the database export'); 
    UTL_FILE.FCLOSE(out_file); 
END; 
+0

まず、クライアントの 'h:\'ドライブまたはサーバーの 'h:\'ドライブにファイルを作成しようとしていますか? 'utl_file'はデータベースサーバ上のファイルにしか書き込めません。コードは実行されますか?それはあなたが期待していることをしていますか?それはエラーを投げますか? 'user_source'を照会し、' dbms_metadata'などを呼び出して、必要なすべての情報を取得することは確かに可能です。あなたが何を求めているのか正確にはわかりません。 –

+0

私はすべての関数、プロシージャ、ビュー、トリガを私が時間をかけて作成したSQLデベロッパーの.sqlファイルに入れようとしています。ディレクトリの作成とそのファイルの出発点は、しかし、それは動作しません..私は実際にコードでこれを行う方法を知らない。それはなぜ私はいくつかのヒントを探しているのだ – Caroso

+0

あなたは何を意味しないのですか?エラーが発生していますか?何のエラー?ファイルは作成されていませんか?ファイル内のデータは期待どおりではありませんか?投稿したコードはうまく動作していますが、コードの一部が動作していないという手順コードを書き出していますか? SQL Developerがあなたのために何をしているのかを複製するコードを書くのはなぜですか? –

答えて

0

エクスポートしたい場合は、Oracleのエクスポート/インポート・ユーティリティは、しかし

http://docs.oracle.com/cd/B28359_01/server.111/b28319/exp_imp.htm

バイナリファイル形式を使用して、ユーザーモード(使用OWNERパラメータ)で/インポート・データベースのオブジェクトをエクスポートしますあなたのオブジェクトとデータのメタデータをSQLファイルに変換するには、ユーザのデータベースオブジェクトuser_tables - > tables、user_constraints - > constraints(コンパイルされたオブジェクトのテキストを取得するためのuser_source)でuser_objects - >のようなOracleのカタログユーザビューをクエリできます。 .sqlファイルでオブジェクトやデータを再作成するつもりなら、特にスクリプトを移植したい場合は、いくつかの重労働があります。その場合は、サードパーティのツールを使用します。

0

これはあなたが探しているものの答えになるはずです。それが役に立てば幸い。これはあなたが求めているものの例です。必要に応じて他のタイプも組み込むことができます。

spool on; 
spool <target path>/filename; 

SET SERVEROUTPUT ON SIZE UNLIMITED; 
BEGIN 
    FOR I IN 
    (SELECT al.* 
    FROM ALL_SOURCE al 
    WHERE OWNER = 'AVROY' 
    ORDER BY name, 
    line 
) 
    LOOP 
    dbms_output.put_line(I.TEXT); 
    END LOOP; 
    FOR I IN 
    (SELECT * FROM ALL_TABLES WHERE OWNER = 'AVROY' 
) 
    LOOP 
    BEGIN 
     dbms_output.put_line(dbms_metadata.get_ddl('TABLE',i.table_name,'AVROY')); 
    EXCEPTION 
    WHEN OTHERS THEN 
     NULL; 
    END; 
    END LOOP; 
END; 

SPOOL OFF;