MySQL - 如何在过程中编写查询? (SET 数据类型参数)
Posted
技术标签:
【中文标题】MySQL - 如何在过程中编写查询? (SET 数据类型参数)【英文标题】:MySQL - How do I write a query in a procedure? (SET datatype parameter) 【发布时间】:2015-01-15 14:04:01 【问题描述】:有几种方式传递参数也没有数据。 如何在过程中编写查询? (SET 数据类型参数)
CREATE TABLE tb (
iCode INT(11) NOT NULL DEFAULT 0 COMMENT 'Primary Key'
, bChk1 VARCHAR(1) NOT NULL DEFAULT 'Y' COMMENT '(Y, N)'
, bChk2 SET('Y', 'N') DEFAULT 'Y' COMMENT '(Y, N)'
) ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE PROCEDURE getChk1 (
IN inChk VARCHAR(10)
)
BEGIN
SELECT * FROM tb WHERE bChk1 IN (inChk);
END;
CREATE PROCEDURE getChk2 (
IN inChk SET('Y', 'N')
)
BEGIN
SELECT * FROM tb WHERE bChk2 IN (inChk);
END;
## Row Data
# ----------------------
# iCode | bChk1 | bChk2
# ----------------------
# 1 | Y | Y
# 2 | N | Y
# 3 | Y | N
# 4 | N | N
# ----------------------
执行程序...
CALL getChk2 ("'Y', 'N'"); -- No Data
CALL getChk2 ('"Y", "N"'); -- No Data
CALL getChk2 ('1, 2'); -- No Data
CALL getChk2 ("'1', '2'"); -- No Data
CALL getChk2 ("'Y'|'N'"); -- No Data
CALL getChk2 ('Y|N'); -- No Data
CALL getChk2 ("'1'|'2'"); -- No Data
CALL getChk2 ('1|2'); -- No Data
CALL getChk1 ("'Y', 'N'"); -- No Data
CALL getChk1 ('"Y", "N"'); -- No Data
CALL getChk1 ("'Y'|'N'"); -- No Data
如何在过程中编写查询? (SET 数据类型参数) 感谢阅读。
【问题讨论】:
尝试作为静态查询处理。动态查询不是 【参考方案1】:Pass array to mysql stored routine
DROP PROCEDURE IF EXISTS getChk1;
DELIMITER //
CREATE PROCEDURE getChk1(IN inChk VARCHAR(10))
BEGIN
SET @sql = CONCAT('SELECT * FROM tb WHERE bChk1 IN (', inChk, ')');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
//
DELIMITER ;
CALL getChk1 ('\'Y\', \'N\'');
【讨论】:
【参考方案2】:感谢回答的主。 尝试将查询解析为静态查询,而不是动态查询。
CREATE PROCEDURE getChk2 (
IN inChk SET('Y', 'N')
)
BEGIN
SELECT * FROM tb WHERE FIND_IN_SET(bChk2, inChk);
END;
CALL getChk2 ('Y,N');
【讨论】:
以上是关于MySQL - 如何在过程中编写查询? (SET 数据类型参数)的主要内容,如果未能解决你的问题,请参考以下文章
MySQL存储过程中如何遍历查询结果然后调用另一个存储过程?