【问题标题】:How do I export data from a table to a xml file?如何将数据从表导出到 xml 文件?
【发布时间】:2016-07-16 09:33:09
【问题描述】:

我想从 oracle 将数据导出到 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;

【问题讨论】:

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


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      相关资源
      最近更新 更多