MySQL - 如何在过程中编写查询? (SET数据类型参数)

时间:2014-11-18 11:36:29

标签: mysql function procedure sqldatatypes

以几种方式传递参数也没有数据。 如何在程序中编写查询? (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数据类型参数) 谢谢你的阅读。

2 个答案:

答案 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');