我正在尝试在MySQL中创建存储过程但是当我尝试时,phpmyadmin告诉我,我有一个语法错误。为什么?我正在搜索问题可能是因为我在if else条件下有CASE语句,但据我所知,这太疯狂了,我希望你能帮助我并告诉我我的问题是什么问题在Mysql中存储过程。感谢。
DELIMITER $$
CREATE PROCEDURE extraer_fechas(
statusFecha SMALLINT(5),
string_busqueda VARCHAR(50)
)
BEGIN
IF string_busqueda = "false" THEN
SELECT
CONCAT(fechas.year,'-',fechas.month,'-',fechas.dates) AS fecha_php,
fechas.ID,
fechas.dates,
fechas.month,
fechas.year,
paises.nombre AS city,
fechas.region,
fechas.place,
fechas.tickets,
fechas.directions,
fechas.flyer,
seo_sitemap.title,
seo_sitemap.description,
seo_sitemap.url,
seo_sitemap.array_tags
FROM fechas
INNER JOIN paises ON fechas.city = paises.id_pais
INNER JOIN seo_sitemap ON seo_sitemap.id_articulo = fechas.ID
WHERE seo_sitemap.id_tabla = 1
AND fechas.status_fecha = statusFecha
ORDER BY
fechas.month,
fechas.dates,
fechas.year
ELSE
SELECT
CONCAT(fechas.year,'-',fechas.month,'-',fechas.dates) AS fecha_php,
fechas.ID,
fechas.dates,
fechas.month,
fechas.year,
paises.nombre AS city,
fechas.region,
fechas.place,
fechas.tickets,
fechas.directions,
fechas.flyer,
seo_sitemap.title,
seo_sitemap.description,
seo_sitemap.url,
seo_sitemap.array_tags
FROM fechas
INNER JOIN paises ON fechas.city = paises.id_pais
INNER JOIN seo_sitemap ON seo_sitemap.id_articulo = fechas.ID
WHERE
CONCAT(fechas.place,' ',fechas.region,', ',paises.nombre,', ',(
CASE fechas.month
WHEN 01 THEN 'Enero'
WHEN 02 THEN 'Febrero'
WHEN 03 THEN 'Marzo'
WHEN 04 THEN 'Abril'
WHEN 05 THEN 'Mayo'
WHEN 06 THEN 'Junio'
WHEN 07 THEN 'Julio'
WHEN 08 THEN 'Agosto'
WHEN 09 THEN 'Septiembre'
WHEN 10 THEN 'Octubre'
WHEN 11 THEN 'Noviembre'
WHEN 12 THEN 'Diciembre'
END),' ',fechas.dates,' de ',fechas.year)
LIKE '%string_busqueda%'
AND seo_sitemap.id_tabla = 1
AND fechas.status_fecha = statusFecha ;
END IF;
END$$
MYSQL错误是:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ELSE SELECT CONCAT(fechas.year,'-',fechas.month,'-',fechas.dates) AS fecha' at line 34
再次感谢。
答案 0 :(得分:0)
我认为你不能使用分隔符
为什么你需要分隔符?
我尝试使用此代码并正常工作
CREATE PROCEDURE extraer_fechas(
statusFecha SMALLINT(5),
string_busqueda VARCHAR(50)
)
BEGIN
IF string_busqueda = "false" THEN
SELECT
CONCAT(fechas.year,'-',fechas.month,'-',fechas.dates) AS fecha_php,
fechas.ID,
fechas.dates,
fechas.month,
fechas.year,
paises.nombre AS city,
fechas.region,
fechas.place,
fechas.tickets,
fechas.directions,
fechas.flyer,
seo_sitemap.title,
seo_sitemap.description,
seo_sitemap.url,
seo_sitemap.array_tags
FROM fechas
INNER JOIN paises ON fechas.city = paises.id_pais
INNER JOIN seo_sitemap ON seo_sitemap.id_articulo = fechas.ID
WHERE seo_sitemap.id_tabla = 1
AND fechas.status_fecha = statusFecha
ORDER BY
fechas.month,
fechas.dates,
fechas.year
;ELSE
SELECT
CONCAT(fechas.year,'-',fechas.month,'-',fechas.dates) AS fecha_php,
fechas.ID,
fechas.dates,
fechas.month,
fechas.year,
paises.nombre AS city,
fechas.region,
fechas.place,
fechas.tickets,
fechas.directions,
fechas.flyer,
seo_sitemap.title,
seo_sitemap.description,
seo_sitemap.url,
seo_sitemap.array_tags
FROM fechas
INNER JOIN paises ON fechas.city = paises.id_pais
INNER JOIN seo_sitemap ON seo_sitemap.id_articulo = fechas.ID
WHERE
CONCAT(fechas.place,' ',fechas.region,', ',paises.nombre,', ',(
CASE fechas.month
WHEN 01 THEN 'Enero'
WHEN 02 THEN 'Febrero'
WHEN 03 THEN 'Marzo'
WHEN 04 THEN 'Abril'
WHEN 05 THEN 'Mayo'
WHEN 06 THEN 'Junio'
WHEN 07 THEN 'Julio'
WHEN 08 THEN 'Agosto'
WHEN 09 THEN 'Septiembre'
WHEN 10 THEN 'Octubre'
WHEN 11 THEN 'Noviembre'
WHEN 12 THEN 'Diciembre'
END),' ',fechas.dates,' de ',fechas.year)
LIKE '%string_busqueda%'
AND seo_sitemap.id_tabla = 1
AND fechas.status_fecha = statusFecha
;END IF
;end
答案 1 :(得分:0)
尝试以下为我工作
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `extraer_fechas`(
statusFecha SMALLINT(5),
string_busqueda VARCHAR(50)
)
BEGIN
IF string_busqueda = "false" THEN
SELECT
CONCAT(fechas.year,'-',fechas.month,'-',fechas.dates) AS fecha_php,
fechas.ID,
fechas.dates,
fechas.month,
fechas.year,
paises.nombre AS city,
fechas.region,
fechas.place,
fechas.tickets,
fechas.directions,
fechas.flyer,
seo_sitemap.title,
seo_sitemap.description,
seo_sitemap.url,
seo_sitemap.array_tags
FROM fechas
INNER JOIN paises ON fechas.city = paises.id_pais
INNER JOIN seo_sitemap ON seo_sitemap.id_articulo = fechas.ID
WHERE seo_sitemap.id_tabla = 1
AND fechas.status_fecha = statusFecha
ORDER BY
fechas.month,
fechas.dates,
fechas.year;
ELSE
SELECT
CONCAT(fechas.year,'-',fechas.month,'-',fechas.dates) AS fecha_php,
fechas.ID,
fechas.dates,
fechas.month,
fechas.year,
paises.nombre AS city,
fechas.region,
fechas.place,
fechas.tickets,
fechas.directions,
fechas.flyer,
seo_sitemap.title,
seo_sitemap.description,
seo_sitemap.url,
seo_sitemap.array_tags
FROM fechas
INNER JOIN paises ON fechas.city = paises.id_pais
INNER JOIN seo_sitemap ON seo_sitemap.id_articulo = fechas.ID
WHERE
CONCAT(fechas.place,' ',fechas.region,', ',paises.nombre,', ',(
CASE fechas.month
WHEN 01 THEN 'Enero'
WHEN 02 THEN 'Febrero'
WHEN 03 THEN 'Marzo'
WHEN 04 THEN 'Abril'
WHEN 05 THEN 'Mayo'
WHEN 06 THEN 'Junio'
WHEN 07 THEN 'Julio'
WHEN 08 THEN 'Agosto'
WHEN 09 THEN 'Septiembre'
WHEN 10 THEN 'Octubre'
WHEN 11 THEN 'Noviembre'
WHEN 12 THEN 'Diciembre'
END),' ',fechas.dates,' de ',fechas.year)
LIKE '%string_busqueda%'
AND seo_sitemap.id_tabla = 1
AND fechas.status_fecha = statusFecha ;
END IF;
END