SQL语法作为MySQL例程的参数?

SQL语法作为MySQL例程的参数?,sql,mysql,Sql,Mysql,我有以下MySQL例程: DELIMITER $$ CREATE DEFINER=`root`@`%` PROCEDURE `getGroupOrders`(grp INT, ord CHAR(20), srt CHAR(4),

我有以下MySQL例程:

DELIMITER $$  

CREATE DEFINER=`root`@`%` PROCEDURE `getGroupOrders`(grp INT,
                                                     ord CHAR(20),
                                                     srt CHAR(4), 
                                                     page INT, 
                                                     count INT)  
BEGIN  

  SELECT * 
    FROM `dbre`.`order_info`   
   WHERE username IN (SELECT `dbre`.`users`.`username` 
                        FROM `dbre`.`users`  
                       WHERE `dbre`.`users`.`id_group` = grp)   
ORDER BY ord srt LIMIT page,count;  

END  


正如您所看到的,我希望将排序列和排序作为参数传递,但是我遇到了语法错误。有没有办法做到这一点,或者我必须为每种排序类型创建类似的例程?

我认为您尝试的方式不可能做到这一点。 不能使用变量来定义方向列的顺序

我能想到的唯一解决方法是从动态创建的字符串中创建一个准备好的语句(在这里,您可以使用变量指定order by details),然后执行该准备好的语句

下面是这样一个动态语句的示例:

我认为这在您尝试的方式中是不可能的。 不能使用变量来定义方向列的顺序

我能想到的唯一解决方法是从动态创建的字符串中创建一个准备好的语句(在这里,您可以使用变量指定order by details),然后执行该准备好的语句

下面是这样一个动态语句的示例:

。。。语法错误是什么意思?第3行、第13行还是什么?语法错误在
ORDER BY
行中,我有
ord
srt
参数,MySQL只说有错误,但没有说明原因。。。。语法错误是什么意思?第3行,第13行还是什么?语法错误在
ORDER BY
行中,我有
ord
srt
参数,MySQL只说有错误,但没有说明原因。我把它作为一个PreparedStatement,但我正在尝试使用一种更“基于例程”的方法。@Triztian:你说“基于例程”是什么意思方法据我所知,您可以在过程中使用准备好的语句抱歉,我使用了不正确的词,我正在尽可能多地使用MySQL例程,这意味着我不希望java代码中有任何“Select”字符串,只需要对存储过程调用如下语句:
“{CALL myRoutine();}”
,我知道有时会不可避免地使用prepared语句,但我希望这不是其中之一。我不是说Java中的prepared语句,而是存储过程中的prepared语句(因为这是在存储过程中动态构造SQL字符串的唯一方法),我把它作为PreparedStatement,但我想用一种更“基于常规”的方法。@Triztian:你说的“基于常规”方法是什么意思?据我所知,您可以在过程中使用准备好的语句抱歉,我使用了不正确的词,我正在尽可能多地使用MySQL例程,这意味着我不希望java代码中有任何“Select”字符串,只需要对存储过程调用如下语句:
“{CALL myRoutine();}”
,我知道有时会不可避免地使用prepared语句,但我希望这不是其中之一。我说的不是Java中的prepared语句,而是存储过程中的prepared语句(因为这是在存储过程中动态构造SQL字符串的唯一方法)