MySQL 可以支持JSON 字段了, 非常的符合时代潮流,对于某些操作非常方便。但是使用时,也要处处小小心才行。笔者在今日开始写mysql的存贮过程,由于mysql 没有数组的支持,考虑使用JSON 类型。
考虑下面的代码片段
.................
-- 初始化这个json 类型变量
set sp_PkArr="";
.....
call sp_GetPkArr(sp_PkArr);
.........
其中 sp_GetPkArr 的定义如下
sp_GetPkArr(out pkArr json) `
编译正常,没有错误,一运行就返回如下错误:
DB error found , error = 22032, message = Invalid JSON text: “The document is empty.” at position 0 in value for column ‘.sp_PkArr’.
由于器提示过于模糊,因此不知道是哪里导致的错误,是sp_GetPkArr里面.还是调用过程,进行了各种恶心的调试之后,问题仍然没有解决。后来突然意识到,这个错误可能就是参数不符合要求造成的。将上面的调用代码,改成
.................
-- 初始化这个json 类型变量
set sp_PkArr="[]";
.....
call sp_GetPkArr(sp_PkArr);
.........
再次调用就没有错误了,这里的使用说明,mysql存贮过程在调用时,参数阶段就开始检查数据类型了。
经验:
Json 类型的变量,一定要初始化成json的对象格式,否则就会出错。
一个重要补充:
在WorkBench中,输入如下测试代码
set @pkArr="";
call sp_GetPkToPostToFront(@pkArr);
select @pkArr;
并没有产生上述错误,这也是笔者屡屡不能发现错误的一个原因。这段代码说明,mysql 对session 变量的处理和declare变量的处理机制是不一样的,大家也要注意。
maraSun 2021-12-05 BJFUDQ