mysql - 我无法创建这个过程

标签 mysql sql

我尝试使用此代码创建新的存储过程,但我总是出现此错误:

    CREATE PROCEDURE `retriveData`() NOT DETERMINISTIC CONTAINS SQL SQL
    SECURITY DEFINER  BEGIN

    SET @sql = NULL 

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 '' at line 4

我使用此代码创建存储过程:

CREATE PROCEDURE `retriveData`() NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER 
BEGIN

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'MAX(IF(pa.item = ''',
          item,
          ''', pa.comValue, 0)) AS ',
          item
        )
      ) INTO @sql
    FROM salaryStructureView;

    SET @sql = CONCAT('SELECT p.id
                        , p.fullname
                        , p.salary, ', @sql, ' 
                       FROM employee p
                       LEFT JOIN salaryStructureView AS pa 
                        ON p.id = pa.id
                       GROUP BY p.id');

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END

最佳答案

您忘记了分隔符:

DELIMITER $$
CREATE PROCEDURE `retriveData`() NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER 
BEGIN

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(pa.item = ''',
      item,
      ''', pa.comValue, 0)) AS ',
      item
    )
  ) INTO @sql
FROM salaryStructureView;

SET @sql = CONCAT('SELECT p.id
                    , p.fullname
                    , p.salary, ', @sql, ' 
                   FROM employee p
                   LEFT JOIN salaryStructureView AS pa 
                    ON p.id = pa.id
                   GROUP BY p.id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
$$

关于mysql - 我无法创建这个过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58843468/

相关文章:

sql - 根据条件选择相同列作为不同列

mysql - 时间戳列的字段列表中的未知列

MySQL根据当前表中的单元格从另一个表中获取多个值

sql - MySQL - Select语句,按每篇文章的评论数排序

c# - mysql和mssql之间来回发送数据

php - mysql 不同的多列

mysql - 跨服务器中的所有数据库运行查询

mysql - 使用 GROUP BY 和 ORDER BY 的 mysql 查询的奇怪结果

sql - 如何仅从表中选择具有不存在于 PostgreSQL 内部联接中的 ID 的行?

mysql - 由于外键,无法在现有列上添加 AUTO_INCREMENT