MySQL将字符串添加到自身

时间:2015-01-28 20:45:38

标签: mysql sql string dynamic cursor

我试图在游标中的MySQL中添加字符串,我需要它用于我的动态SQL查询。

我在光标

之前设置了字符串
ESQL3 = "FIRST PART OF QUERY ";

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

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

您希望在@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。您发布的代码中没有发生这种情况。用户定义变量的范围是会话,该变量的值在语句中保持不变。下次在会话中引用时,它将具有上次分配给它的任何值。

初始化时,请不要使用尾随逗号。将下一个表达式追加到SELECT列表时添加逗号。

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

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

存储过程变量 ESQL3设置为什么并不重要。与用户定义的变量@ESQL3之间存在 no 关系。

在循环内部,当您追加到@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之前有空格。)