MySQL 向自身添加字符串

MySQL adding string to itself

我正在尝试在游标中的 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,该变量的值跨语句持续存在。下次在会话中引用它时,它将具有上次分配给它的任何值。

并且在您初始化它时,请省略尾随的逗号。将下一个表达式附加到 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 whatever。(确保在 FROM 之前有 space。)