gpt4 book ai didi

mysql - 构建程序时,出现错误 "SELECT not valid input at this position"

转载 作者:行者123 更新时间:2023-11-29 12:04:54 25 4
gpt4 key购买 nike

认为这是一个常见问题,但在浏览了最后一个小时的采访后,显然不是。

简而言之,我试图将一个用于过程的常见查询放入其中。这是我到目前为止所拥有的。

DROP PROCEDURE IF EXISTS splitColumnsDelimiter;

CREATE PROCEDURE splitColumnsDelimiter(IN DELIMITER VARCHAR(5))
BEGIN
SELECT
sometbl.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(sometbl.name, '|', numbers.n), '|', -1) name
FROM
(SELECT 1 n UNION ALL SELECT 2
UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN sometbl
ON CHAR_LENGTH(sometbl.name)
-CHAR_LENGTH(REPLACE(sometbl.name, '|', ''))>=numbers.n-1
ORDER BY
id, n

END;

查询本身就像一个魅力。然而,添加任何代码以将其转换为过程似乎会使我正在使用的工作台到处弹出错误。从我在互联网上找到的例子来看,我所拥有的应该(?)没问题,但显然不是,所以有人碰巧知道我可能在哪里被引入歧途,以及我在哪里可以得到启发?我想这一定很容易做到。

编辑:这里的代码似乎至少消除了错误的发生。

DROP PROCEDURE IF EXISTS splitColumnsDelimiter;

DELIMITER //

CREATE PROCEDURE splitColumnsDelimiter()
BEGIN

SELECT
sometbl.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(sometbl.name, '|', numbers.n), '|', -1) name
FROM
(SELECT 1 n UNION ALL SELECT 2
UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN sometbl
ON CHAR_LENGTH(sometbl.name)
-CHAR_LENGTH(REPLACE(sometbl.name, '|', ''))>=numbers.n-1
ORDER BY
id, n;

END //
DELIMITER ;

执行CALL splitColumnsDelimiter;现在按预期工作,返回了我期望看到的 SQL 表。

最佳答案

尝试一下:

DELIMITER //
DROP PROCEDURE IF EXISTS splitColumnsDelimiter;
CREATE PROCEDURE splitColumnsDelimiter()
BEGIN

SELECT
sometbl.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(sometbl.name, '|', numbers.n), '|', -1) name
FROM
(SELECT 1 n UNION ALL SELECT 2
UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN sometbl
ON CHAR_LENGTH(sometbl.name)
-CHAR_LENGTH(REPLACE(sometbl.name, '|', ''))>=numbers.n-1
ORDER BY
id, n;

END //
DELIMITER ;

如果您打算为分隔符|放置一个参数,然后放入一个参数并使用它而不是对其进行硬编码,则不应将其称为DELIMITER

编辑:

我在您的 comments that you are using workbench 中读到,只需保留过程定义如下:

 CREATE PROCEDURE splitColumnsDelimiter()
BEGIN

SELECT
sometbl.id,
SUBSTRING_INDEX(SUBSTRING_INDEX(sometbl.name, '|', numbers.n), '|', -1) name
FROM
(SELECT 1 n UNION ALL SELECT 2
UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN sometbl
ON CHAR_LENGTH(sometbl.name)
-CHAR_LENGTH(REPLACE(sometbl.name, '|', ''))>=numbers.n-1
ORDER BY
id, n;

END

删除DELIMITERDROP语句

关于mysql - 构建程序时,出现错误 "SELECT not valid input at this position",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31680557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com