参数为列表的mysql存储过程

uujelgoq  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(415)

这个问题在这里已经有了答案

如何将id列表传递给mysql存储过程(1个答案)
两年前关门了。
我有一个mysql语句如下:

select * from jobs where job_status in (6,9,10) and due_date>'2018-10-31'

我想创建一个存储过程,因此它需要2个参数:
作业状态
以及
到期日
我不知道如何定义“job\u status”参数。它是一个整数列表,可以是任意数量的值。e、 g.(1,2,3,4,5)或(1)

dpiehjr4

dpiehjr41#

您可以尝试如下声明变量

DECLARE @LIST VARCHAR(200)
DECLARE @vdate date
SET @LIST = '1,3'
SET @vdate='2018-10-31'

select * from jobs where job_status in (@LIST) and due_date>@vdate
lrl1mhuk

lrl1mhuk2#

在mysql中,必须创建存储过程,例如:

DELIMITER //
DROP PROCEDURE IF EXISTS up_getJobsByStatusAndDuedate //
CREATE PROCEDURE `up_getJobsByStatusAndDuedate`(pJobStatusList TEXT, pDuedate varchar(10))
BEGIN

    select * from jobs where job_status in (pJobStatusList) and due_date> pDuedate;

END//

然后可以在workbench上测试调用存储:

call up_getJobsByStatusAndDuedate('6,9,10', '2018-10-31');
wz8daaqr

wz8daaqr3#

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_selectjobs` $$
CREATE DEFINER=`root`@`%` PROCEDURE `sp_selectjobs`(
  IN job_status_in VARCHAR(255),
  IN due_date_in datetime    )
BEGIN
SELECT * FROM jobs
WHERE job_status in (@job_status_in) AND due_date>'@due_date_in'

END $$

DELIMITER ;

您可以创建这样的存储过程,并可以使用自己的参数调用此存储过程,如

call sp sp_selectjobs('1,2,3,4','2018-11-2')

这样地

相关问题