Anzeige Fehlermeldung mit DBMS_OUTPUT.put_line

Meine Forderung ist, um eine Prozedur schreiben, hinzufügen von Werten in COUNTRIES Tabelle. Aber Erstens es ist zu prüfen, ob die entsprechenden Werte vorhanden sind in einer anderen Tabelle REGIONS da es ein Fremdschlüssel ist. Nur wenn die Werte existieren, ist der insert into - COUNTRIES Tabelle erlaubt. Ansonsten, Nein.

Ich schrieb ein Stück code und seine Arbeitsmethoden in Ordnung:

create or replace procedure addi3 (c_cntry_id  in out countries.country_id%type,
                                   c_cntr_name in countries.country_name%type, 
                                   c_rgn_id    in countries.region_id%type)
is
    region_exists pls_integer;
begin
    begin
        select 1 into region_exists
        from regions r 
        where r.region_id = c_rgn_id;
    exception
      when no_data_found then
        region_exists := 0;
        DBMS_OUTPUT.PUT_LINE('Already present');    
    end;

    if region_exists = 1 then
      insert into countries(country_id, country_name,region_id)
      values (c_cntry_id, c_cntr_name,c_rgn_id);

      DBMS_OUTPUT.PUT_LINE('Inserted');
    end if;
end addi3;
/

Es ist in Ordnung, außer das wenn ich die Prozedur auszuführen, indem Sie ein region_id, die nicht vorhanden ist in Regionen der Tabelle, es richtig, nicht von der Einfügung in den Ländern Tabelle. Ich möchte jedoch, Sie zu verbessern durch das werfen eines Fehlers mit DBMS_OUTPUT.put_line wenn das region_id existiert nicht, und obwohl ich DBMS_OUTPUT.put_line, es ist nicht Anzeige der entsprechenden Fehlermeldung. Kann mir bitte jemand Anleitung?

  • Sie haben SERVEROUTPUT on für Ihre Sitzung? wenn nicht, müssen Sie manuell Holen Sie sich Ihre 'Bereits vorhanden' oder 'Eingefügt' - Nachrichten.
  • ja,habe ich: "legen Sie serverout auf" vor der Durchführung der Prozedur
  • Wenn Sie sagen, Sie wollen, dass er "Fehler", meinst du Sie wollen, es zu sagen somegthing andere als die aktuelle 'ist Bereits vorhanden'? Oder haben Sie tatsächlich eine Ausnahme ausgelöst und das Programm beenden?
  • ja,sagen Sie, "Schon vorhanden" in meinem Fall, wenn region_id nicht vorhanden.(In Wirklichkeit,es sollte "Nicht vorhanden", aber ich denke, die korrigiert werden können, sobald die Fehlermeldung sichtbar
  • Wenn die region nicht existiert - nicht, dass, wenn seine eigentlich einfügen?
  • Regionen ist eine fremde Tabelle.Und Nein,es sollten nur Daten aus Regionen Tabelle (in diesem Fall region_id als 1,2,3 oder 4)
  • Recht - sorry - es ist eine Existenz auf FK, nicht auf die Ziel-Tabelle. Mein schlechtes.
  • Gut, Sie können immer tack über das eingebaute SQLERRM zu Ihrem Ausgang, wenn Sie wollen, dass die oracle-Nachricht angehängt { dbms_output.put_line ('- Region nicht vorhanden '||sqlerrm); }, dann, wenn Sie möchten, dass der code, um eine tatsächliche Ausnahme, Sie kann nur {RAISE; } zu erhöhen, die NO_DATA_FOUND an den aufrufenden code.
  • tx,kann u bitte Bearbeiten Sie meine original-code zu schreiben? Ich bin neu in oracle
  • hören Sie auf @MichaelBroughton, wollen Sie die TATSÄCHLICHEN Fehler-tracking nicht mit DBMS_OUTPUT. ich bin mit dem code und sehe die Ausgabe von Meldungen obwohl.
  • Seltsam. Warum bin ich nicht zu sehen Nachrichten? Ich habe auch eingestellt serverout auf.Wie sind Sie durch das ausführen der Prozedur?
  • Ersten - können wir nicht beantworten, warum Sie nicht sehen, die Ausgabe, ohne zu wissen, welchen client Sie verwenden. Zweitens möchte ich darauf hinweisen, dass code wie dieser zu prüfen, für die FKs ist in der Regel eine schlechte Idee. Setzen Sie eine richtige Einschränkung an den DB-Ebene, versuchen Sie, die stecken, und wenn der client versucht, fügen Sie ein schlechtes region die Einschränkung Fehler wird an den client ausgelöst. Sie duplizieren, etwas, das die DB nicht schneller und besser ist eine Verschwendung von Ressourcen und überflüssige code-Komplexität in fast jedem Fall.

InformationsquelleAutor user3400060 | 2015-12-01
Schreibe einen Kommentar