【问题标题】:Can I overwrite IN parameter within a MySQL stored procedure我可以在 MySQL 存储过程中覆盖 IN 参数吗
【发布时间】:2019-08-01 09:07:38
【问题描述】:

我可以覆盖 MySQL 存储过程中的 IN 参数吗?

也就是说,我可以这样做吗:

create procedure proc1 (IN p_parm1 int)
begin
  if p_parm1 is null then
    **set p_parm1 = -1;**
  end if
end $$

【问题讨论】:

  • 覆盖输入参数不是一个好习惯

标签: mysql stored-procedures input parameters overwrite


【解决方案1】:

你应该像这样自己测试过:

mysql> create procedure proc1 (IN p_parm1 int) begin
 if p_parm1 is null then
   set p_parm1 = -1;
 end if; 
 select p_parm1;
end$$
Query OK, 0 rows affected (0.02 sec)

mysql> call proc1(123)$$
+---------+
| p_parm1 |
+---------+
|     123 |
+---------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call proc1(null)$$
+---------+
| p_parm1 |
+---------+
|      -1 |
+---------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

所以答案是肯定的,您可以更改输入的值。在您的示例中,您有效地为输入参数提供了一个默认值,以防它为空。

【讨论】:

  • 谢谢。对不起这是我的错。我只是不确定调用环境是否也可以看到被覆盖的更改。我猜它不会,因为它不是 INOUT 参数。无论如何,正如你所说,我也可以测试。通常,如果我没有找到明确记录的行为,那么我不会仅仅根据我碰巧观察到的情况进行推断。原因是:好吧,谁知道呢,也许它是一个未记录的功能,依赖它可能不安全。
猜你喜欢
  • 1970-01-01
  • 2010-11-02
  • 2010-11-01
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
相关资源
最近更新 更多