web-dev-qa-db-fra.com

Erreur de syntaxe avec Concat dans la gâchette à proximité du relevé du signal

S'il vous plaît aidez-moi avec la syntaxe pour MySQL 5.6.

Pour une raison quelconque, je reçois l'erreur:

ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near '('WRONG SOCIAL: ', new.social);
        end if;
        if not (new.photo is nul'

Lorsque vous essayez d'exécuter ce code SQL:

create table table_social (
        sid varchar(250) primary key,
        auth char(32) not null,
        social integer,               -- to be checked by triggers
        female boolean,
        given varchar(250) not null,
        family varchar(250) null,
        photo varchar(1000) null,     -- to be checked by triggers
        place varchar(250) null,
        ip varchar(250) not null,
        uid integer not null references 
            table_users(uid) on delete cascade
);

delimiter //

create trigger social_insert_trigger before insert on table_social
for each row begin
        if new.social < 0 OR new.social > 6 then
                signal sqlstate '45000' 
                set message_text = concat('WRONG SOCIAL: ', new.social);
        end if;
        if not (new.photo is null OR new.photo regexp '^https?://') then
                signal sqlstate '45000' 
                set message_text = concat('WRONG PHOTO: ', new.photo);
        end if;
end
//

create trigger social_update_trigger before update on table_social
for each row begin
        if new.social < 0 OR new.social > 6 then
                signal sqlstate '45000' 
                set message_text = concat('WRONG SOCIAL: ', new.social);
        end if;
        if not (new.photo is null OR new.photo regexp '^https?://') then
                signal sqlstate '45000' 
                set message_text = concat('WRONG PHOTO: ', new.photo);
        end if;
end
//

J'ai essayé de supprimer concat, remplaçant des guillemets simples par des guillemets doubles, la division signal ligne en deux (comme ci-dessus) et de retour - et ne peut toujours pas le savoir, qu'est-ce qui ne va pas.

4
Alexander Farber

Testez ce code:

drop table if EXISTS table_social;
create table table_social (
        sid varchar(250) primary key,
        auth char(32) not null,
        social integer,               -- to be checked by triggers
        female boolean,
        given varchar(250) not null,
        family varchar(250) null,
        photo varchar(1000) null,     -- to be checked by triggers
        place varchar(250) null,
        ip varchar(250) not null,
        uid integer not null references 
            table_users(uid) on delete cascade
);

delimiter //

create trigger social_insert_trigger before insert on table_social
for each row begin
        if new.social < 0 OR new.social > 6 then
                set @message_text = concat('WRONG SOCIAL: ', new.social);
                signal sqlstate '45000'
                set MESSAGE_TEXT = @message_text;
        end if;
        if not (new.photo is null OR new.photo regexp '^https?://') then
                set @message_text = concat('WRONG PHOTO: ', new.photo);
                signal sqlstate '45000' set message_text = @message_text;
        end if;
end
//

create trigger social_update_trigger before update on table_social
for each row begin
        if new.social < 0 OR new.social > 6 then
                set @message_text = concat('WRONG SOCIAL: ', new.social);
                signal sqlstate '45000' 
                set message_text = @message_text;
        end if;
        if not (new.photo is null OR new.photo regexp '^https?://') then
                set @message_text = concat('WRONG PHOTO: ', new.photo);
                signal sqlstate '45000' 
                set message_text = @message_text;
        end if;
end
//

il n'est pas compris Concat () In Signal Sqlstate Set Message_text

12
a_vlad