Duplikate erkennen und Fehlermeldung ausgeben in Oracle PL/SQL

 

Duplikate erkennen und Fehlermeldung ausgeben in Oracle PL/SQL

In diesem Blog-Beitrag zeige ich euch, wie man eine Prüfung erstellt, um zu schauen, ob die Werte schon bereits in der Datenbank liegen. Wir verwenden hierfür die Standarddaten aus der EMP Tabelle.


Problemstellung

Das Ziel ist es, zu verhindern, dass der Mitarbeiter mit dem Namen "Clark" mehrfach in der Datenbank gespeichert wird. Falls ein Eintrag mit diesem Namen bereits existiert, soll eine Fehlermeldung ausgegeben werden.

Lösungsansatz

Um dieses Problem zu lösen, verwenden wir PL/SQL, die Prozedur-Sprache für Oracle-Datenbanken. Der folgende Code prüft, ob der Name "Clark" bereits in der `EMP`-Tabelle vorhanden ist. Falls ja, gibt das System eine Fehlermeldung aus.

-- Declare the variables used in the PL/SQL block
DECLARE
    v_check_duplicate       NUMBER;           -- Variable to store the count of duplicate names
    v_emp_name              VARCHAR2(4000) := 'Clark';  -- Variable to store the employee name

-- Begin the execution block
BEGIN
    -- Check for duplicates in the EMP table where the employee name matches v_emp_name (case insensitive)
    SELECT COUNT(*)
    INTO v_check_duplicate
    FROM dual
    WHERE EXISTS (SELECT EMPNO
                  FROM EMP
                  WHERE LOWER(ENAME) = LOWER(v_emp_name));

    -- If exactly one duplicate is found, output an error message
    IF v_check_duplicate = 1 THEN
        -- The following block is commented out but is intended for use in an Oracle APEX environment
        -- to display an error message directly on a page item.
        /*
        APEX_ERROR.ADD_ERROR (
            p_message            => v_emp_name || ' exists already!',
            p_display_location   => apex_error.c_inline_with_field_and_notif,
            p_page_item_name     => 'APEX_PAGE_ITEM_NAME'
        );
        */

        -- For environments other than APEX, output the error to the console
        DBMS_OUTPUT.PUT_LINE(v_emp_name || ' exists already!');
    END IF;

-- End the execution block
END;

0 $type={blogger}:

Kommentar veröffentlichen