试图在 Mysql 中创建存储过程的语法错误?
Posted
技术标签:
【中文标题】试图在 Mysql 中创建存储过程的语法错误?【英文标题】:Syntax error trying to create an Stored Procedure in Mysql? 【发布时间】:2017-01-06 04:47:03 【问题描述】:我正在尝试在 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
再次感谢。
【问题讨论】:
请贴出错误代码和信息。 对不起。这是#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
谢谢
【参考方案1】:
我认为你不能使用分隔符
为什么需要分隔符??
我尝试了这段代码并且工作正常
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
【讨论】:
您好,谢谢,但还没有工作。#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
【参考方案2】:
试试下面它对我有用
-- --------------------------------------------------------------------------------
-- 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
【讨论】:
以上是关于试图在 Mysql 中创建存储过程的语法错误?的主要内容,如果未能解决你的问题,请参考以下文章