码迷,mamicode.com
首页 > 数据库 > 详细

mysql实现oracle存储过程默认参数

时间:2019-06-06 22:42:56      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:var   导致   原来   限制   color   lib   min   参数   http   

我们都知道oracle存储过程支持为参数设置默认值,这样即使存储过程升级,原来的调用也可以不受影响。但是mysql不支持,mariadb也没有支持(截止10.4也是如此)。但是这一限制会导致升级麻烦重重。虽然如此,我们可以通过mysql 5.7/mariadb 10.2引入的json类型来变通实现。如下所示:

drop function number_stats;
CREATE FUNCTION number_stats(in_numbers JSON)
    RETURNS INTEGER
    NOT DETERMINISTIC
    CONTAINS SQL
    COMMENT Accept an array of integers and their median
BEGIN
    DECLARE v_count INT UNSIGNED
        DEFAULT JSON_LENGTH(in_numbers);
    RETURN JSON_EXTRACT(
        in_numbers,
        CONCAT($[, FLOOR(v_count / 2), ])
    );
END;

 

mariadb> select number_stats([1,2,3,4]);

+---------------------------+
| number_stats([1,2,3,4]) |
+---------------------------+
|                         3 |
+---------------------------+
1 row in set

mariadb> select JSON_VALUE({ "x": [0,1], "y": "[0,1]", "z": "Monty" },$.z);
+----------------------------------------------------------------+
| JSON_VALUE({ "x": [0,1], "y": "[0,1]", "z": "Monty" },$.z) |
+----------------------------------------------------------------+
| Monty                                                          |
+----------------------------------------------------------------+
1 row in set

mariadb> select JSON_VALUE({ "x": [0,1], "y": "[0,1]", "z": "Monty" },$.x
);
+----------------------------------------------------------------+
| JSON_VALUE({ "x": [0,1], "y": "[0,1]", "z": "Monty" },$.x) |
+----------------------------------------------------------------+
| NULL                                                           |
+----------------------------------------------------------------+
1 row in set

mariadb> select JSON_VALUE({ "x": [0,1], "y": "[0,1]", "z": "Monty" },$.y
);
+----------------------------------------------------------------+
| JSON_VALUE({ "x": [0,1], "y": "[0,1]", "z": "Monty" },$.y) |
+----------------------------------------------------------------+
| [0,1]                                                          |
+----------------------------------------------------------------+
1 row in set

https://federico-razzoli.com/variable-number-of-parameters-and-optional-parameters-in-mysql-mariadb-procedures

https://mariadb.com/kb/en/library/json_extract/

 

mysql实现oracle存储过程默认参数

标签:var   导致   原来   限制   color   lib   min   参数   http   

原文地址:https://www.cnblogs.com/zhjh256/p/10987076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!