Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error Code: 1648. Data too long for condition item 'MESSAGE_TEXT'

This is my trigger, i've declared msg varchar(255) and i've tried to change it from 255 to 550 but it doesn't stop to send me that error code:

*Error Code: 1648. Data too long for condition item 'MESSAGE_TEXT*

The msg variable is declared in a trigger; the trigger is a merge of 2 triggers (i'm working by MySQL and i can't use multiple triggers for the same action time and event on one table) and this is the body:

-- --------------------------------------------------------------------------------------------------
CREATE TRIGGER BEFORE_INSERT_ON_SENTIERO__HA__TAPPA
BEFORE INSERT ON SENTIERO__HA__TAPPA
FOR EACH ROW 
BEGIN

/* TRIGGER controlla_MaxCARDINALITA_INSERT */

-- variables for controlla_MaxCARDINALITA_INSERT
DECLARE max_cardinalita INTEGER;
DECLARE msg varchar(255);

-- variables for controlla_corrispondenzaTappaFineInizio_INSERT
DECLARE temp_tappaOLD INTEGER;
DECLARE temp_posizione_tappaOLD INTEGER;
DECLARE temp_inizio_tappaNEW VARCHAR(45);
DECLARE temp_fine_tappaOLD VARCHAR(45);


SELECT COUNT(*) into max_cardinalita
FROM SENTIERO__HA__TAPPA
WHERE IDsentiero=NEW.IDsentiero;

IF max_cardinalita>=10 THEN

        set msg = 'INSERT: Il sentiero ha già il massimo numero di tappe consentito ';
        signal sqlstate '45000' set message_text = msg;

END IF;



/* TRIGGER controlla_corrispondenzaTappaFineInizio_INSERT */

IF EXISTS ( SELECT IDsentiero, IDtappa
            FROM SENTIERO__HA__TAPPA as sht
            WHERE NEW.IDsentiero=sht.IDsentiero and NEW.IDtappa=sht.IDtappa) THEN

            set msg = 'INSERT: La tappa inserita è già presente nel sentiero; non è possibile inserirla 2 volte ';
            signal sqlstate '45000' set message_text = msg;

END IF;

SELECT IDtappa into temp_tappaOLD
FROM SENTIERO__HA__TAPPA as sht1
WHERE NEW.IDsentiero=sht1.IDsentiero and posizione_tappa>=ALL ( SELECT posizione_tappa
                                                                FROM SENTIERO__HA__TAPPA as sht2
                                                                WHERE NEW.IDsentiero=sht2.IDsentiero );

SELECT posizione_tappa into temp_posizione_tappaOLD
FROM SENTIERO__HA__TAPPA as sht
WHERE NEW.IDsentiero=sht.IDsentiero and temp_tappaOLD=sht.IDtappa;

IF NEW.posizione_tappa<>temp_posizione_tappaOLD THEN

        set msg = 'INSERT: La posizione della tappa inserita deve essere consecutiva alla posizione dell ultima tappa di quel sentiero: le tappe devono essere consecutive ';
        signal sqlstate '45000' set message_text = msg;

END IF;

SELECT inizio into temp_inizio_tappaNEW
FROM TAPPA
WHERE NEW.IDtappa=TAPPA.IDtappa;

SELECT fine into temp_fine_tappaOLD
FROM TAPPA
WHERE temp_tappaOLD=TAPPA.IDtappa;

IF temp_inizio_tappaNEW<>temp_fine_tappaOLD THEN

        set msg = 'INSERT: La fine della tappa precedente non corrisponde con l inizio di questa tappa: le tappe devono essere consecutive ';
        signal sqlstate '45000' set message_text = msg;

END IF;


END$$
-- --------------------------------------------------------------------------------------------------

EDIT ::

DECLARE msg varchar(5);
set msg = concat('I');
signal sqlstate '45000' set message_text = msg;
like image 851
FrancescoN Avatar asked Feb 05 '13 14:02

FrancescoN


2 Answers

MESSAGE_TEXT is, in MySQL, VARCHAR(128). Some of your messages, you are trying to assign there, are longer than that.

I guess one can not simply redefine MESSAGE_TEXT so you have to come up with a shorter message. See https://dev.mysql.com/doc/refman/5.5/en/signal.html#signal-condition-information-items.

like image 153
Lukas Z. Avatar answered Oct 06 '22 08:10

Lukas Z.


I think you can't modify the definition of the condition item (see this). The definition for MESSAGE_TEXT is VARCHAR(128); I tried to change this, but couldn't.

But, you can use MariaDB (works like MySQL). In MariaDB the condition item MESSAGE_TEXT has the definition VARCHAR(512). So, you can't change this, but it can contain more now. This works only for MariaDB in version 10.3.6 an up.

like image 43
Víctor Noé Sánchez Carreño Avatar answered Oct 06 '22 08:10

Víctor Noé Sánchez Carreño