Ich möchte eine Prozedur erstellen, die mir hilft, eine neue Zeile in die Tabelle "Abteilungen" einzufügen. Ich muss Abteilungs-ID, Abteilungsname, Standort-ID und Manager-ID einfügen. Ich habe dies erfolgreich mit diesem Code gemacht:

create or replace PROCEDURE add_depar(
    p_name VARCHAR2, p_mgr NUMBER, p_loc NUMBER) IS
BEGIN
  INSERT INTO DEPARTMENTS (department_id,
    department_name, manager_id, location_id)
  VALUES (DEPARTMENTS_SEQ.NEXTVAL, p_name, p_mgr, p_loc);
  DBMS_OUTPUT.PUT_LINE('Added Dept: '|| p_name);
EXCEPTION
 WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE('Err: adding dept: '|| p_name);
END;

Jetzt möchte ich die Eindeutigkeit des Abteilungsnamens überprüfen. Wenn die Anforderungen nicht erfüllt sind, möchte ich eine Ausnahme machen. Darf ich um Ihre Hilfe bitten! Ich habe dies viele Male versucht, aber immer noch nicht gelöst. Bitte helfen Sie!

Vielen Dank

0
Kaloyan 27 Dez. 2015 im 16:59

2 Antworten

Beste Antwort

Wenn der Abteilungsname eindeutig sein soll, fügen Sie eine Einschränkung / einen eindeutigen Index hinzu und lassen Sie die Datenbank die Arbeit erledigen:

create unique index unq_department_name on department(name);

Es ist viel besser, die Datenbank die Validierung durchführen zu lassen, da die Datenbank die Konsistenz sowohl für Aktualisierungen und Einfügungen als auch für mehrere gleichzeitige Transaktionen gewährleistet.

2
Gordon Linoff 27 Dez. 2015 im 14:02

Am einfachsten wäre es, einen eindeutigen Index für "department.name" (wie von @Gordon erwähnt) hinzuzufügen und dann eine DUP_VAL_ON_INDEX-Ausnahme hinzuzufügen. Würde so aussehen -

EXCEPTION
 WHEN dup_val_on_index THEN
  [exception handling];
 WHEN others THEN
  DBMS_OUTPUT.PUT_LINE('Err: adding dept: '|| p_name);
END;
0
rsorero 28 Dez. 2015 im 17:13