尝试在Mysql中创建存储过程时出现语法错误?

时间:2016-08-30 03:30:43

标签: mysql sql stored-procedures phpmyadmin

我正在尝试在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

再次感谢。

2 个答案:

答案 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