【问题标题】:Optional Parameters in Mysql stored proceduresMysql存储过程中的可选参数
【发布时间】:2010-09-10 14:34:33
【问题描述】:

如何在mysql存储过程中创建可选参数?

【问题讨论】:

标签: mysql


【解决方案1】:

根据this bug,目前没有办法创建可选参数。

【讨论】:

    【解决方案2】:

    mySQL 存储过程不支持可选参数,目前也没有任何添加此功能的计划。我建议为可选参数传递 null。

    【讨论】:

      【解决方案3】:

      我使用的(有点笨拙的)解决方法是定义一些我认为我可能会使用的参数,然后在使用之前测试可选参数的值是否为 NOT NULL:

      CREATE PROCEDURE add_product(product_name VARCHAR(100), product_price FLOAT,
                                   cat1 INT, cat2 INT, cat3 INT)
      -- The cat? parameters are optional; provide a NULL value if not required
      BEGIN
      
        ...
      
        -- Add product to relevant categories  
        IF cat1 IS NOT NULL THEN
          INSERT INTO products_to_categories (products_id, categories_id) VALUES (product_id, cat1);
        END IF;
        IF cat2 IS NOT NULL THEN
          INSERT INTO products_to_categories (products_id, categories_id) VALUES (product_id, cat2);
        END IF;
        IF cat3 IS NOT NULL THEN
          INSERT INTO products_to_categories (products_id, categories_id) VALUES (product_id, cat3);
        END IF;
      
      END
      

      如果我不想在调用存储时使用该参数,我只需传递一个 NULL 值。以下是调用上述存储过程的示例:

      CALL add_product("New product title", 25, 66, 68, NULL);
      

      【讨论】:

      • IFNULL() 函数非常适合这种情况;我刚刚在 INSERT 查询的 VALUES 列表中内联实现了它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 2011-11-13
      相关资源
      最近更新 更多