2016-03-29 21 views
0

データをoracleからxmlファイルにエクスポートしたいとします。私はそれについてどうやって行くのか分からない。これは私が今まで試したことのコードですが、テーブルが存在しないというエラーが表示されています。スキーマにはそのテーブルに対する選択特権があり、そのテーブルは同じスキーマに選択されています。この間にこだわる。テーブルの所有者がプロシージャの所有者と同じでない場合、任意のヘルプはテーブルからxmlファイルにデータをエクスポートするにはどうすればよいですか?

CREATE PROCEDURE xmlUnload (ulSchema IN VARCHAR2, ulTable IN VARCHAR2, ulDirectory IN VARCHAR2) 
IS 
    l_file   UTL_FILE.file_type; 
    xml_data  VARCHAR2(5000); 
BEGIN 
    SELECT dbms_xmlgen.getxml('SELECT * FROM '||ulSchema||'.'||ulTable) xml INTO xml_data FROM dual; 

    l_file := UTL_FILE.fopen(ulDirectory,ulSchema'.'ulTable, 'w'); 

    UTL_FILE.putf(l_file, xml_data); 
    UTL_FILE.fclose(l_file); 
END xmlUnload; 

答えて

1

いただければ幸い、あなたはおそらく、実行者権限VS定義した場合に実行しています。

としてはhereを次のように述べています

役割は、PL/SQLブロック でのロールの使用は、それが無名ブロックまたは名前付きブロック(ストアド 手順、であるかどうかに依存するPL/SQLブロックでどのように機能するかを

ファンクション、トリガ)と、定義者の権利または呼び出し元の権利を で実行するかどうかを指定します。

定義者の権限を持つ名前付きブロックで使用されるロールすべてのロールは、定義者の権限で実行される名前付きPL/SQLブロック(ストアド・プロシージャ、ファンクション、または トリガー)で無効化されます( )。ロールは 特権チェックでは使用されず、定義者の権利 プロシージャ内でロールを設定することはできません。

「定義者の権利手続き」については、ここで説明しています。

あなたは実行者権限を使用する(手順を実行しているユーザー)手順を設定しようとすると、この問題が解決するかどうかを確認できます。

CREATE PROCEDURE xmlUnload (ulSchema IN VARCHAR2, ulTable IN VARCHAR2, ulDirectory IN VARCHAR2) 
AUTHID CURRENT_USER -- options are "CURRENT_USER" or "DEFINER"; DEFINER is the default 
IS 
    l_file   UTL_FILE.file_type; 
    xml_data  VARCHAR2(5000); 
BEGIN 
    SELECT dbms_xmlgen.getxml('SELECT * FROM '||ulSchema||'.'||ulTable) xml INTO xml_data FROM dual; 

    l_file := UTL_FILE.fopen(ulDirectory,ulSchema'.'ulTable, 'w'); 

    UTL_FILE.putf(l_file, xml_data); 
    UTL_FILE.fclose(l_file); 
END xmlUnload; 

はここinvoker_rights_clauseの詳細をチェックアウト:http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/create_procedure.htm#i2065815

関連する問題