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存储过程默认参数的更多相关文章
- Oracle存储过程 输出参数赋值异常:“Oracle.DataAccess.Types.OracleString”的类型初始值设定项引发异常。
场景: 写了一个有返回参数的存储过程,在个另开发人员机器上都正常.其它机器报如题错误.让人郁闷的是,所有调用方都是客户端,根本不存在网上众贴所说的版本不一致问题. 分析: 虽然网上的帖子没有根本解决问 ...
- oracle存储过程(带参数的存储过程)
带参数的存储过程 举例:为指定的员工涨100元的工资,打印涨前和涨后的工资 如果带参,需要指定是输入参数还是输出参数 create or replace procedure raisesalary(e ...
- oracle存储过程含参数的插入数据
create or replace procedure proczipcodebyzipinsert( i_zipcode in zipcode.zip%type, i_city in z ...
- MySQL 和 Oracle 在 MyBatis 使用中的区别
MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 ...
- Oracle存储过程创建及调用(转)
在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器.在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的.相对来说,数据库系统中的触发器也是一种存储 ...
- oracle存储过程 --1
一,oracle存储过程语法 1.oracle存储过程结构 CREATE OR REPLACE PROCEDURE oracle存储过程名字 ( 参数1 IN NUMBER, 参 ...
- mysql与oracle的存储过程有什么区别?
MySQL存储过程 (1). 格式 MySQL存储过程创建的格式:CREATE PROCEDURE过程名 ([过程参数[,...]]) [特性 ...]过程体 案例分析: 参数 MySQL存储过程的参 ...
- (转)oracle 存储过程 带游标作为OUT参数输出
(转)oracle 存储过程 带游标作为OUT参数输出 存储过程返回OUT参数的游标 例子. 包中带过程 要自己定义一个type [cur_name] is ref cursor游标,返回的时候就直接 ...
- MySQL与Oracle 差异比较之五存储过程&Function
存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC( id_fac ...
随机推荐
- CspParameters 对象已存在异常 解决多应用对同一容器的访问问题
CspParameters cspParams; cspParams = new CspParameters(PROVIDER_RSA_FULL); cspParams.KeyContainerNam ...
- Tomcat启动堆栈异常
近日部署项目到Tomcat,访问一直404. 于是查看 catalina.out 日志信息,发现如下信息 30-Jun-2019 16:38:03.642 SEVERE [main] org.apac ...
- 刷脸支付袭来,WeChat Pay & AliPay争宠,究竟谁能笑到最后?
移动支付的快速发展,让我们摆脱了对现金的依赖,即使我们出门忘记带现金,那也没关系,我们照样可以通过手机来完成支付.现如今无论是大商场.还是水果摊都支持二维码付款,这也就意味着智慧化的生活正在一步步地向 ...
- Java开发环境之MongoDB
查看更多Java开发环境配置,请点击<Java开发环境配置大全> 伍章:MongoDB安装教程 1)官网下载MongoDB安装包 https://www.mongodb.com/downl ...
- restTemplate x-www-form-urlencoded
MultiValueMap<String, Object> postParameters = new LinkedMultiValueMap<>();postParameter ...
- 变长数组(variable-length array,VLA)(C99)
处理二维数组的函数有一处可能不太容易理解,数组的行可以在函数调用的时候传递,但是数组的列却只能被预置在函数内部.例如下面这样的定义: #define COLS 4 int sum3d(int ar[] ...
- LGOJP3959 宝藏
题目链接 题目链接 题解 一开始想了一个错误的状压dp,水了40分. 这里先记录一下错误的做法: 错解: 设\(g[i,j,S]\)从\(i\)到\(j\),只经过集合\(S\)中的点的最短路,这个可 ...
- php数组打乱顺序
shuffle() PHP shuffle() 函数随机排列数组单元的顺序(将数组打乱).本函数为数组中的单元赋予新的键名,这将删除原有的键名而不仅是重新排序. 语法: bool shuffle ( ...
- delete properties inside object
- 04 Vue Router路由管理器
路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成 ...