mysql实现oracle存储过程默认参数
Posted zhjh256
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql实现oracle存储过程默认参数相关的知识,希望对你有一定的参考价值。
我们都知道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存储过程默认参数的主要内容,如果未能解决你的问题,请参考以下文章