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
2 Antworten
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.
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;
Neue Fragen
sql
Structured Query Language (SQL) ist eine Sprache zum Abfragen von Datenbanken. Zu den Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) gehören. Wenn sich Ihre Frage ausschließlich auf ein bestimmtes DBMS bezieht (bestimmte Erweiterungen / Funktionen verwendet), verwenden Sie stattdessen das Tag dieses DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten ISO / IEC-Standard-SQL verwenden.