Я попытался использовать DB :: unprepared () в файлах миграции после прочтения старых вопросов. но это только дает мне ошибку «Обнаружено нечисловое значение» и ничего не меняется в базе данных. Однако, когда я ввожу SQL-оператор непосредственно в phpmyadmin, добавляя разделитель, он работает. Пожалуйста, предложите мне то, что мне не хватает.
DB::unprepared('
CREATE FUNCTION getNextCustomSeq
(
sSeqName VARCHAR(50),
sSeqGroup VARCHAR(10)
) RETURNS VARCHAR(20)
BEGIN
DECLARE nLast_val INT;
SET nLast_val = (SELECT seq_val
FROM _sequence
WHERE seq_name = sSeqName
AND seq_group = sSeqGroup);
IF nLast_val IS NULL THEN
SET nLast_val = 1;
INSERT INTO _sequence (seq_name,seq_group,seq_val)
VALUES (sSeqName,sSeqGroup,nLast_Val);
ELSE
SET nLast_val = nLast_val + 1;
UPDATE _sequence SET seq_val = nLast_val
WHERE seq_name = sSeqName AND seq_group = sSeqGroup;
END IF;
SET @ret = (SELECT concat(sSeqGroup,'-',lpad(nLast_val,6,0)));
RETURN @ret;
END//
');
О, лол, это опечатка. Вы забыли сбежать с линии:
SET @ret = (SELECT concat(sSeqGroup,'-',lpad(nLast_val,6,0)));
Что это должно быть:
SET @ret = (SELECT concat(sSeqGroup,\'-\',lpad(nLast_val,6,0)));
Обновлено:
DB::unprepared('
CREATE FUNCTION getNextCustomSeq
(
sSeqName VARCHAR(50),
sSeqGroup VARCHAR(10)
) RETURNS VARCHAR(20)
BEGIN
DECLARE nLast_val INT;
SET nLast_val = (SELECT seq_val
FROM _sequence
WHERE seq_name = sSeqName
AND seq_group = sSeqGroup);
IF nLast_val IS NULL THEN
SET nLast_val = 1;
INSERT INTO _sequence (seq_name,seq_group,seq_val)
VALUES (sSeqName,sSeqGroup,nLast_Val);
ELSE
SET nLast_val = nLast_val + 1;
UPDATE _sequence SET seq_val = nLast_val
WHERE seq_name = sSeqName AND seq_group = sSeqGroup;
END IF;
SET @ret = (SELECT concat(sSeqGroup,\'-\',lpad(nLast_val,6,0)));
RETURN @ret;
END//
');
То, что произошло здесь, вы не избежали кавычек, и PHP думает, что вы делаете 'long chunk of text' - 'long chunk of text'
, что, конечно, поднять ошибку A non-numeric value encountered
, Это предупреждение говорит вам, что вы пытаетесь сделать математическое выражение для одной или нескольких нечисловых строк: http://php.net/manual/en/migration71.other-changes.php
Других решений пока нет …