从函数调用dbms_comparison Oracle包

时间:2016-07-04 20:03:36

标签: database oracle comparison

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

我创建了一个函数,它应该返回执行的比较的scanID,以便能够从Java中检索scanID的值。但是,该功能未成功执行,因为它会引发一些错误。 dbms_comparison被识别为标识符,因此它引发以下错误:PLS-00201:identifier' 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;

1 个答案:

答案 0 :(得分:0)

我将您的代码测试为sys并成功编译。由于另一个用户失败

  

PLS-00201:标识符' DBMS_COMPARISON'必须宣布。

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