从函数调用 dbms_comparison Oracle 程序包

Call dbms_comparison Oracle package from function

我发布这个问题是因为我在尝试使用来自 Oracle 函数的 dbms_comparison oracle 包时遇到一些错误。

我创建了一个函数,它应该 return 所执行比较的 scanID,以便能够从 Java 检索 scanID 的值。但是,该函数未成功执行,因为它引发了一些错误。 dbms_comparison 被识别为标识符,因此会引发以下错误:PLS-00201:必须声明标识符 'DBMS_COMPARISON'。

请在下面找到我创建的 Oracle 函数。任何帮助将不胜感激。

    CREATE OR REPLACE FUNCTION compareRecords
    RETURN NUMBER IS
    scanID number;
    v_scan_info dbms_comparison.comparison_type;
    v_compare_result boolean;
    begin
         v_compare_result:= dbms_comparison.compare(
                         comparison_name => 'synchronised',
                         scan_info => v_scan_info,        
                         perform_row_dif => TRUE);

    dbms_output.put_line('Scan id: '||v_scan_info.scan_id);
    scanID := v_scan_info.scan_id;

    if v_compare_result = TRUE then
       dbms_output.put_line(a => 'Tables are synchronized!');
    else
       dbms_output.put_line(a => 'Warning! Data divergence found!'||chr(10));
    end if;
    RETURN scanID;
end compareRecords;

我以 sys 身份测试了您的代码,并成功编译。作为另一个用户失败

PLS-00201: identifier 'DBMS_COMPARISON' must be declared.

因此您必须将代码 sys. 添加到 dbms_comparison 并且需要 grant execute on sys.dbms_comparison to youruser