gpt4 book ai didi

MySQL 将字符串添加到自身

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

我正在尝试在 MySQL 的游标中将字符串添加到自身,我需要它来进行动态 SQL 查询。

我在光标之前设置了字符串

ESQL3 = "FIRST PART OF QUERY ";

现在在光标中我想添加查询的其余部分,我使用 CONCAT() 但我觉得它没有完成这项工作。

SET @ESQL3 = CONCAT(ESQL3, aggregate_function, "(", table_name, ")" as ", table_name, " , ");

结果声明为查询的第一部分 + 该函数的最后一次调用。我已经寻找了很多答案。

谢谢

最佳答案

看起来您想要引用用户定义的变量 @ESQL3 作为 CONCAT 函数中的参数,而不是存储的程序变量 ESQL3.

更改此:

SET @ESQL3 = CONCAT(ESQL3, ...

对此:

SET @ESQL3 = CONCAT(@ESQL3, ...
^

(MySQL 存储程序变量和 MySQL 用户定义变量是两个不同的东西。即 ESQL3@ESQL3不是同一个变量。它们是两个根本不同的变量。

<小时/>

编辑

此外,其余的 CONCAT 参数看起来有点奇怪。这些看起来不错:

, aggregate_function
, "("
, table_name

但这看起来不对:

, ")" as ", table_name, " , ");

我认为 CONCAT 中不允许使用“as”关键字,并且它不会被视为字符串文字。

也许您的意思是包含“as”作为字符串值的一部分,如下所示:

, ") as "
, table_name
, " , "

跟进

您需要初始化@ESQL3。您发布的代码中没有发生这种情况。用户定义变量的范围是 session ,该变量的值在语句之间保持不变。下次在 session 中引用它时,它将具有上次分配给它的任何值。

当你初始化它时,去掉尾随的逗号。将下一个表达式附加到 SELECT 列表时添加逗号。

SET @ESQL3 = "CREATE TABLE Obroty AS SELECT Towar";
^ ^

请注意,我们需要初始化稍后引用的用户定义变量

存储过程变量 ESQL3 设置的内容一点也不重要。这与用户定义变量 @ESQL3 没有关系。

在循环内部,当您追加到 @ESQL3 时,请在表达式之前(而不是之后)包含逗号文字。像这样:

SET @ESQL3 = CONCAT(@ESQL3, ", ", funkcja, "(", miech, ") as ", miech );
^^^^

因此,进入循环后,@ESQL3 将获得该值

CREATE TABLE Obroty AS SELECT Towar
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

第一次通过 read_loop 后,它将具有类似的值

CREATE TABLE Obroty AS SELECT Towar, SUM(foo) AS foo
^^^^^^^^^^^^^^^^^

下一次循环时,它将具有类似的值

CREATE TABLE Obroty AS SELECT Towar, SUM(foo) AS foo, SUM(bar) AS bar
^^^^^^^^^^^^^^^^^

退出循环后,您将准备好附加“FROM无论什么。(确保FROM之前有空格。)

关于MySQL 将字符串添加到自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28202080/

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