2017-12-08 1 views
0

Ich erstelle eine Datenbank, in der ich Eingabedaten mit Triggern validiere. Ich habe sie erfolgreich hinzugefügt, aber es gibt einen Fehler, wenn ich versuche, feine Daten einzugeben.Fehlercode: 1109. Unbekannte Tabelle 'neu' in der Feldliste

Schaffung db, Tabellen und löst

CREATE DATABASE IF NOT EXISTS DBWorkers; 

CREATE TABLE IF NOT EXISTS Ludzie(
PESEL char(11) NOT NULL, 
imie varchar(30) NOT NULL, 
nazwisko varchar(30) NOT NULL, 
data_urodzenia date NOT NULL, 
wzrost float NOT NULL, 
waga float NOT NULL, 
rozmiar_buta int NOT NULL, 

PRIMARY KEY(PESEL)); 

DELIMITER $$ 
CREATE FUNCTION check_pesel(PESEL char(11)) RETURNS bool 
BEGIN 
IF(
    CHAR_LENGTH(NEW.PESEL) <> 11 AND 
    CONVERT(PESEL, SIGNED INT) > 0 AND 
    CONVERT(LEFT(PESEL,2), SIGNED INT) BETWEEN 0 AND 99 AND 
    CONVERT(SUBSTRING(PESEL,3,2), SIGNED INT) BETWEEN 1 AND 12 AND 
    CONVERT(SUBSTRING(PESEL,3,2), SIGNED INT) BETWEEN 1 AND  DAY(LAST_DAY(CONCAT('19',LEFT(PESEL,2),'-',SUBSTRING(PESEL,3,2),'-01'))) 
    ) 
    THEN 
     RETURN TRUE; 
    ELSE 
     RETURN FALSE; 
END IF; 
END $$ 

CREATE TRIGGER `ludzie_data_check_before_insert` BEFORE INSERT ON `Ludzie` 
FOR EACH ROW 
BEGIN 
IF NOT(
     check_pesel(NEW.PESEL) AND 
     NEW.WZROST > 0.0 AND 
     NEW.WAGA > 0.0 AND 
     NEW.ROZMIAR_BUTA > 0 
    ) 
THEN 
    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'check on Ludzie failed during insert'; 
END IF; 
END $$ 
DELIMITER ; 

Wenn ich zur Eingabe von Daten versuchen durch

INSERT INTO Ludzie VALUES ('7810396705', 'Anders', 'Kennedy','1958-08-20', 1.70, 88.6, 43) 

I

Error Code: 1109. Unknown table 'new' in field list 

bekomme ich bereits versucht, MySQL-Server ein- und ausschalten, überprüft, ob ich es mit der richtigen Datenbank mache. Alles scheint gut zu sehen, aber es ist nicht:/

+0

Nicht, dass es wichtig ist, aber nur für den Fall, welche Version von MySQL laufen Sie? –

+0

5.7.20-0ubuntu0.16.04.1 – Arryyyy

Antwort

2

Ich glaube, ich Ihr Problem gefunden:

CHAR_LENGTH(NEW.PESEL) <> 11 AND 
CONVERT(PESEL, SIGNED INT) > 0 AND 

inkonsistente Verwendung von NEW.PESEL und PESEL ist, sollten Sie nicht das Schlüsselwort new verwenden in eine Funktion, die nichts zur Datenbank hinzufügt. In diesem Zusammenhang wurde der Fehler NEW als Tabelle anstelle eines Schlüsselworts erkannt.

+0

Danke, es hat funktioniert. Ich weiß nicht, wie ich das blind sein könnte :( – Arryyyy

1

Ja, nach etwas zu lesen tut Ich bin auch bereit zu wetten, dass das „neue“ Schlüsselwort nicht in

CHAR_LENGTH (NEW.PESEL) benötigt wird.

NEUES Schlüsselwort wird in Aktualisierungs- und Einfügebefehlen verwendet.

Verwandte Themen