2016-07-04 4 views
1

Ich schreibe diese Frage, da einige Fehler auftreten, wenn ich versuche, das Oracle-Paket dbms_comparison aus einer Oracle-Funktion zu verwenden.Aufruf des Oracle-Pakets dbms_comparison von der Funktion

Ich habe eine Funktion erstellt, die die scanID des durchgeführten Vergleichs zurückgeben soll, um den scanID-Wert aus Java abrufen zu können. Die Funktion wird jedoch nicht erfolgreich ausgeführt, da sie einige Fehler verursacht. Der dbms_comparison wird als Bezeichner erkannt und löst folgenden Fehler aus: PLS-00201: Bezeichner 'DBMS_COMPARISON' muss deklariert werden.

Unten finden Sie die von mir erstellte Oracle-Funktion. Jede Hilfe wäre willkommen.

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; 

Antwort

0

Ich habe Ihren Code als sys getestet und wurde erfolgreich kompiliert. Als ein anderer Benutzer mit

fehlgeschlagen

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

So haben Sie sys. zu dbms_comparison auf Ihrem Code hinzufügen und müssen grant execute on sys.dbms_comparison to youruser

+0

ich ausführen zu gewähren bin versucht, aber es nicht genügend Privilegien – gla315

+0

schenkt @ gla315 verbinden Sie als sys ? – vercelli

+1

Danke, es funktioniert – gla315

Verwandte Themen