ursus contionabundo: 2. Funktionierende Lösung: Procedur und Trigger

Beitrag lesen

check tuts nicht. Aber die Lösung mit Procedur und Trigger tut es.

  • Hat den Vorteil, dass die View nicht umgangen werden kann.
  • Hat den Vorteil. dass die Prozedur leicht um weitere Fehlerprüfungen und individuelle Fehlernummern ergänzt werden kann.
CREATE TABLE Dokument ( D_Name VARCHAR(100) NOT NULL);
# Query OK, 0 rows affected (0,02 sec)
 
DELIMITER $
  
CREATE PROCEDURE `check_Dokument`(IN D_Name varchar( 100 ) )
    BEGIN
        IF D_NAME LIKE "" THEN
            SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'D_NAME was empty';
        END IF;
    END$
# Query OK, 0 rows affected (0,02 sec)

 
CREATE TRIGGER `Dokument_before_insert` BEFORE INSERT ON `Dokument`
    FOR EACH ROW
    BEGIN
        CALL check_Dokument(new.D_Name);
    END$   
# Query OK, 0 rows affected (0,02 sec)

CREATE TRIGGER `parts_before_update` BEFORE UPDATE ON `Dokument`
    FOR EACH ROW
    BEGIN
        CALL check_Dokument(new.D_Name);
    END$   
# Query OK, 0 rows affected (0,00 sec)

DELIMITER ;
 
INSERT INTO Dokument (D_Name) values ("foo");
# Query OK, 1 row affected (0,01 sec)

INSERT INTO Dokument (D_Name) values ("");
# ERROR 1644 (45000): D_NAME was empty