以几种方式传递参数也没有数据。 如何在程序中编写查询? (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数据类型参数) 谢谢你的阅读。
答案 0 :(得分: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\'');
答案 1 :(得分:1)
感谢他的回答。 试图将查询解析为静态查询而不是动态查询。
CREATE PROCEDURE getChk2 (
IN inChk SET('Y', 'N')
)
BEGIN
SELECT * FROM tb WHERE FIND_IN_SET(bChk2, inChk);
END;
CALL getChk2 ('Y,N');