2016-03-29 39 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

相關問題