2014-01-23 3 views
0

Поскольку невозможно установить минимальную длину переменной в mysql, как я могу проверить триггер, если добавленное числовое значение имеет, например, 11 цифр. Я пытался сделать это таким образомДлина номера в mysql

delimiter // 
CREATE TRIGGER OnInsert BEFORE INSERT on 'klient' 
declare err varchar(40); 
if char_length(CAST(NEW.Phone AS CHAR(10)) < 9 THEN 
set err = "zly nr telefonu"; 
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = err; 
end if; 
if char_length(CAST(NEW.Kod AS CHAR(6))) < 5 THEN 
set err = "zly kod pocztowy"; 
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = err; 
end if; 
if NEW.nr < 1 THEN 
set err = "zly nr domu"; 
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = err; 
end if; 
if char_length(CAST(NEW.Pesel AS CHAR(12))) < 11 THEN 
set err = "zly nr pesel"; 
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = err; 
end if; 
// 
delimiter ; 

Но это вызывает ошибку.

+3

Какая Ваша ошибка? –

+0

Какой тип данных вы используете для своей колонки «Телефон»? –

+0

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' klient 'declare err varchar (40); если char_length (CAST (NEW.Telefon AS CHAR (10 'в строке 1 \t 0.000 sec – whd

ответ

0
CREATE TRIGGER t1 BEFORE INSERT ON user 
FOR EACH ROW BEGIN 

    DECLARE numLength INT; 
    SET numLength = (SELECT CHAR_LENGTH(NEW.Phone)); 

    IF (numLength < 9) THEN 
    SET NEW.col = 1/0 ;/*--or some thing else **/ 
    END IF; 

END; 
+0

Что должно делать '1/0'? –

+0

Это просто пример, какую операцию он может здесь выполнить. –

+0

is' for каждая строка начинается, если я проверяю только длину новых данных? – whd

Смежные вопросы