gpt4 book ai didi

mysql - 如何在mysql中正确创建程序?

转载 作者:行者123 更新时间:2023-11-29 19:45:55 24 4
gpt4 key购买 nike

我对 MySQL 很陌生,正在尝试创建一个简单的过程。该过程需要接收一个参数(即列名),并返回表,其中行按作为参数传递的列进行排序。

这是我到目前为止所写的内容:

delimiter //
CREATE PROCEDURE OrderMyTableBy (ColumnName varchar(45))
BEGIN
SELECT *
FROM items
ORDER BY ColumnName;
END;//
delimiter ;

过程已成功创建。

然后我这样调用它:

CALL OrderMyTableBy('price')

结果,我得到的表没有按价格排序的行。我得到了针对此查询可以获得的常用表:SELECT * FROM items。所以基本上看来 ColumnName 被忽略了。

注意:如果我这样调用该过程:CALL OrderMyTableBy(helloworld)。我会收到此错误:

Error Code: 1054. Unknown column 'helloworld' in 'field list'

希望我的问题很清楚。如果您需要更多详细信息,请在下面评论。谢谢!

最佳答案

抱歉,由于某种原因,代码输入在此答案中不起作用。

终于我找到了方法:

创建过程有两种方法:

  1. 正确的方法是打开存储过程(在架构的左侧 Pane 中)并使用我在问题中提供的语法创建它,但没有“分隔符”行。

    创建过程 OrderByColName (IN col VARCHAR(20))

    开始

    SET @sql = CONCAT('SELECT * FROM items ORDER BY ', col, ' ASC');

    从@sql准备stmt;

    执行 stmt;

    解除分配准备 stmt;

    END

  2. 另一种方法是在“查询”选项卡(我之前尝试过的位置)中执行操作。在这里您需要使用以下语法:

分隔符//

CREATE DEFINER=root@localhostPROCEDUREOrderByColName(IN col VARCHAR(20))

开始

SET @sql = CONCAT('SELECT * FROM items ORDER BY ', col, ' ASC');

从@sql准备stmt;

执行 stmt;

解除分配准备 stmt;

END

//分隔符;

希望有帮助。再次抱歉,代码输入不起作用

关于mysql - 如何在mysql中正确创建程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40979914/

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