如何将数据从表导出到xml文件?

时间:2016-03-29 01:37:56

标签: xml stored-procedures oracle11g export-to-xml

我想从oracle将数据导出到xml文件。我不知道该怎么做。这是我到目前为止所尝试的代码但是我收到一个错误,表示表不存在。该模式具有表的select权限,并且该表与所选的模式相同。坚持这一点。任何帮助将不胜感激

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 个答案:

答案 0 :(得分:1)

如果表的所有者与该过程的所有者不同,那么您可能遇到了定义者与调用者权限的情况。

如上所述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