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

标签 mysql function procedure sqldatatypes

传递参数的几种方式也没有数据。 如何在过程中编写查询? (设置数据类型参数)

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 数据类型参数) 感谢阅读。

最佳答案

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\'');

关于MySQL - 如何在过程中编写查询? (SET 数据类型参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26993379/

相关文章:

mysql创建过程脚本

database - 执行程序 Oracle 11g

delphi - 在 Delphi 中是否有可能在另一个进程中获取函数/过程的地址?

php - Laravel: Eloquent all() 不返回对象数组

Mysql子查询结果在where子句中

mysql - Sequelize 属于很多禁用相同的ID

mysql - 如何在MySQL中对行进行唯一编号?

java - 在java中打开参数

javascript - 将具有多个函数的 JavaScript 简化为单个函数数组

c - 为什么 func() 和 func(void) 不同