在mysql中创建过程时出现语法错误

sq1bmfud  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(363)

我有这个问题。

SELECT distinct c.reportingDate, c.clientId
FROM clients AS c
WHERE NOT EXISTS 
      ( SELECT 1
        FROM accounts_europe AS e
        WHERE e.reportingDate = c.reportingDate
          AND e.clientId = c.clientId

        union

        SELECT 1 -- line A. unexpected select error
        FROM accounts_usa AS u
        WHERE u.reportingDate = c.reportingDate
          AND u.clientId = c.clientId
      ) ;

当在mysql工作台上执行它时,它会显示一个语法错误,在a行显示“unexpected select”。
但是,由于查询是正确的,所以当我执行它时,它确实会执行并返回正确的结果。
当我试图创建一个包含完全相同内容的过程时,它无法编译。源代码如下:

CREATE PROCEDURE `proc_sample`()
BEGIN
    SELECT distinct c.reportingDate, c.clientId
    FROM clients AS c
    WHERE NOT EXISTS 
          ( SELECT 1
            FROM accounts_europe AS e
            WHERE e.reportingDate = c.reportingDate
              AND e.clientId = c.clientId

            union

            SELECT 1 -- line A. unexpected select error
            FROM accounts_usa AS u
            WHERE u.reportingDate = c.reportingDate
              AND u.clientId = c.clientId
          ) ;
END

显示的消息是“对象的ddl语句包含语法错误”,这是我做错了什么还是mysql工作台的bug?

yqlxgs2m

yqlxgs2m1#

您的查询在语法上是正确的。可能是工作台的bug。谈到存储过程,您应该能够使用该查询创建它。尝试使用下面的查询创建sp。在我的例子中,我可以使用这个创建sp。复制此查询在工作台中打开一个新的查询编辑器并将其粘贴到那里,选择all并按 Ctrl + Shift + Enter ```
USE YOUR_DB;
DROP procedure IF EXISTS proc_sample;

DELIMITER $$
USE YOUR_DB$$
CREATE DEFINER=admin@% PROCEDURE proc_sample()
BEGIN
SELECT distinct c.reportingDate, c.clientId
FROM clients AS c
WHERE NOT EXISTS
( SELECT 1
FROM accounts_europe AS e
WHERE e.reportingDate = c.reportingDate
AND e.clientId = c.clientId

        union

        SELECT 1
        FROM accounts_usa AS u
        WHERE u.reportingDate = c.reportingDate
          AND u.clientId = c.clientId
      ) ;

END$$

DELIMITER ;

31moq8wy

31moq8wy2#

出现这个错误是因为mysql语法错误已经被修复了。改用最新的工作台版本(目前是wb8.0.11rc,请参阅下载页上的“开发版本”)。这对你应该有用。
)mysql workbench使用antlr4解析sql代码。这需要mysql语法来生成解析器。

相关问题