根据不同条件验证MySQL的存储程序

Validate Stored Procduer of MySQL based on different condition

提问人:Prachi Prajapati 提问时间:10/21/2023 更新时间:10/22/2023 访问量:22

问:

我正在研究用于从数据库获取记录的MySQL存储过程。

在存储过程中,我有一个参数,即运输公司的类型。所以我必须根据参数 ex 在程序中添加条件。如果参数为“CENTRAL_FULFILMENT”,则需要为过滤器记录连接更多表,但如果参数为“STANDARD”,则需要在 where 子句中添加一些条件。

任何人都可以以一般方式帮助如何根据 if else 条件连接表以及如何根据不同的参数在 where 子句中添加过滤器。

谢谢。

我期待得到一个答案,如果我在调用过程时传递参数,那么根据参数,我需要连接不同的表,并需要在where子句中添加不同的条件。 请向我展示一些与此要求相关的示例。

mysql 过程

评论


答:

0赞 Bill Karwin 10/22/2023 #1

您有两种选择:

一种是根据条件运行不同的 SQL 查询。

CREATE PROCEDURE MyProc(IN shippingCompany VARCHAR(20))
BEGIN
  CASE shippingCompany
  WHEN 'CENTRAL_FULFILMENT' THEN
    SELECT ... FROM table1 JOIN table2 ...;
  WHEN 'STANDARD' THEN
    SELECT ... FROM table1 WHERE ...conditions...;
  ELSE
    ...some other SQL query...
  END CASE;
END

另一种是根据条件构建一个字符串,然后使用 PREPARE 和 EXECUTE 将该字符串作为查询运行。

CREATE PROCEDURE MyProc(IN shippingCompany VARCHAR(20))
BEGIN
  SET @sql = 'SELECT ... FROM table1';

  CASE shippingCompany
  WHEN 'CENTRAL_FULFILMENT' THEN
    SET @sql = CONCAT(@sql, ' JOIN table2 ...');
  WHEN 'STANDARD' THEN
    SET @sql = CONCAT(@sql, ' WHERE ...conditions...');
  END CASE;

  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END