Я делаю процедуру в MySql, чтобы создавать листы в моей таблице котировка, как две цифры настоящего месяца + два последних настоящего года + индекс котировки нечто похожее C1119001, где 001 ссылается на индекс 1 из моей таблицы, проблема состоит в том, что он посылает мне ошибку You have an, ошибка in your SQL syntax; it seems the ошибка is around: ' if ((SELECT COUNT (*) from t_cotizaciones
LIMIT 'at line...
CREATE DEFINER = CURRENT_USER PROCEDURE `crearFolio`( id_cliente int (100))
BEGIN
if((SELECT COUNT(*) from `t_cotizaciones` LIMIT 1)=0)
THEN
set @folio := select concat('','C',Date_format(now(),'%m%y'),'001')
ELSE
if((SELECT MAX(id) from `t_cotizaciones` LIMIT 1)<=10)
THEN
set @var := concat("00",(SELECT MAX(id) from `t_cotizaciones` LIMIT 1)+1),
set @folio:=select concat('','C',Date_format(now(),'%m%y'),@var);
ELSEIF((SELECT MAX(id) from `t_cotizaciones` LIMIT 1)<100)
THEN
set @var := concat("0",(SELECT MAX(id) from `t_cotizaciones` LIMIT 1)+1)
set @folio:=select concat('','C',Date_format(now(),'%m%y'),@var);
ELSE
set @var := concat((SELECT MAX(id) from `t_cotizaciones` LIMIT 1)+1)
set @folio:= @folio := select concat('','C',Date_format(now(),'%m%y'),@var);
END if;
end if;
INSERT into `t_cotizaciones`(`id`, `folio`, `id_cliente`, `fecha`, `estatus`)values(null,@folio , id_cliente, now(),'1');
SELECT id FROM `t_cotizaciones` where folio = @folio;
END;
Ты вредишь консультация, ты она, должно быть, делишь следующей формы: Сначала объяви, что переменная, чтобы вводить MaximoID
DECLARE vMaxid INT DEFAULT 0;
DECLARE folio VARCHAR(3);
DECLARE fecha VARCHAR(4);
DespuГ©s, ты делаешь консультацию и с решением INTO, результат ты это вводишь в переменную vMaxid, не нуждаешься в LIMIT, с функцией MAX, всегда тебя приносит 1 единственный реестр
SELECT MAX(id) INTO vMaxid from `t_cotizaciones`;
Сейчас sГ, - уже podrГЎs использовать твой IF
if( vMaxid <=10)
Для вопроса даты просто с нею funciГіn DATE_FORMAT, %m = в месяце, %y = последние две цифры aГ±o:
SET fecha = DATE_FORMAT(now(),'%m%y');
Следует упомянуть о том, что вместо того, чтобы использовать так IF, ты мог использовать функцию LPAD, для нулей izquiera:
SET folio = LPAD(vMaxid,3,"0");
, Которые переведенные означают, что он наполнит с нулем, до тех пор, пока Ваша длина не будет 3 символа, а именно, если vMaxid 100, не введет ningГєn нуль
Серьезная таблица с triger:
CREATE TABLE t_cotizaciones (
id int(11) NOT NULL AUTO_INCREMENT,
folio varchar(8) DEFAULT NULL,
id_cliente int(11) DEFAULT NULL,
fecha timestamp NULL DEFAULT CURRENT_TIMESTAMP,
estatus varchar(1) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TRIGGER crearFolio BEFORE INSERT ON t_cotizaciones FOR EACH ROW BEGIN
SELECT MAX(id) INTO @id from t_cotizaciones;
/*Si la tabla no tiene registros mandara NULL, como id*/
SET @id = IFNULL(@id+1,1) ;
SET NEW.folio = CONCAT('C',DATE_FORMAT(now(),'%m%y'),LPAD(@id,3,'0'));
END;
Только ты должен наполнять остальные данные, и лист создает автоматический