在MySQL中创建过程时,如何按工作排序?

在MySQL中创建过程时,如何按工作排序?,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我试图创建一个过程,插入新讲师的数据,然后显示添加的最后3位讲师。这就是我的桌面讲师的样子: 这是我创建过程的尝试: 然后我用这些数据调用该过程,例如: 然而,ORDER BY似乎没有发挥作用,因为我总是收到员工100、101、102,而不是107、108、109 我做错了什么?作为临时解决方案,您可以使用事先准备好的声明: 在emp_id INT中创建程序new_select,名字VARCHAR20,姓氏VARCHAR20,教员VARCHAR3 开始 在讲师中插入emp\u id、姓名、教员

我试图创建一个过程,插入新讲师的数据,然后显示添加的最后3位讲师。这就是我的桌面讲师的样子:

这是我创建过程的尝试:

然后我用这些数据调用该过程,例如:

然而,ORDER BY似乎没有发挥作用,因为我总是收到员工100、101、102,而不是107、108、109


我做错了什么?

作为临时解决方案,您可以使用事先准备好的声明:

在emp_id INT中创建程序new_select,名字VARCHAR20,姓氏VARCHAR20,教员VARCHAR3 开始 在讲师中插入emp\u id、姓名、教员 值emp_id、名字、姓氏、教员; 根据“根据emp_id DESC LIMIT 3从讲师订单中选择*”编制stmt; 执行stmt; 滴制stmt; 终止
诚实地从的评论中窃取。

找到了问题的根源

同一标识符可用于例程参数,即本地参数 变量和表列。同样,可以使用相同的局部变量名 可以在嵌套块中使用

在这种情况下,标识符是不明确的,如下所示 优先规则适用于:

局部变量优先于例程参数或表 专栏

例程参数优先于表列

内部块中的局部变量优先于局部变量 外部块中的变量

变量优先于表列的行为是 不标准

在过程的代码中,emp_id的顺序被视为emp_id INT中的过程参数的顺序,该参数是常量

所以程序代码必须是

在emp_id INT中创建程序new_select,名字VARCHAR20,姓氏VARCHAR20,教员VARCHAR3 开始 在讲师emp_id、姓氏、姓氏、教员值中插入emp_id、姓氏、教员; 从讲师中选择* 讲师订购。emp_id DESC-!!!!! 限制3; 终止
这再现了问题:。看起来您的代码应该可以工作。这应该被报告为Bug。还有一个欢迎使用堆栈溢出。你写了一个很好的问题,即使答案是你在已有四分之一世纪历史的软件中发现了一个bug。我希望我们将来能看到您做出更多的贡献。@nbk我找到了原因。这不是一个bug。
emp_id INT UNIQUE PRIMARY KEY,
first_name VARCHAR(20),
last_name VARCHAR(20),
faculty VARCHAR(3)
DELIMITER //
    CREATE PROCEDURE new_lect (IN emp_id INT, first_name VARCHAR(20), last_name VARCHAR(20), faculty VARCHAR(3))
    BEGIN
        INSERT INTO lecturers (emp_id, first_name, last_name, faculty) VALUES (emp_id, first_name, last_name, faculty);
        SELECT * FROM lecturers
        ORDER BY emp_id DESC 
        LIMIT 3;
        END//
DELIMITER ;
CALL new_lect(109,'Charlie','Smith','MAT');