Kin*_*sar 3 oracle json plsql oracle12c oracle18c
我正在尝试JSON_OBJECT_T使用以下代码向 a 添加一个空字符串,但我得到的null是值而不是空字符串。
DECLARE
V_OBJ JSON_OBJECT_T;
BEGIN
V_OBJ := JSON_OBJECT_T();
V_OBJ.PUT('customerAccRef','');
DBMS_OUTPUT.PUT_LINE(V_OBJ.stringify);
END;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到以下 json
{"customerAccRef":null}
Run Code Online (Sandbox Code Playgroud)
我想要如下输出
{"customerAccRef":""}
Run Code Online (Sandbox Code Playgroud)
有人可以建议我需要做什么更改才能传递空字符串吗?
发生这种情况的原因是 Oracle 在内部将空字符串更改为NULL值。这是由于一些遗留原因,您可以阅读此答案以了解历史。
我在 JSON 文档中找不到任何可以让我自己绕过这个特定问题的选项,尽管如果有人能找到它,我会很高兴。
作为解决问题的方法,您可以使用TRIM函数将单个空格转换为空白字符串。
V_OBJ.PUT('customerAccRef' , TRIM(' '));
Run Code Online (Sandbox Code Playgroud)
这使
{"customerAccRef":""}
Run Code Online (Sandbox Code Playgroud)
这似乎在 Oracle 12.2 版本中都有效;我在本地机器和 Oracle 18c 中进行了测试: DEMO以及 19c(LiveSQL在线)中进行了测试
这里还需要注意的一点是 simpleselect TRIM(' ') from dual总是返回NULL, which is surprising and luckily for you, it works as expected with JSONs
| 归档时间: |
|
| 查看次数: |
4683 次 |
| 最近记录: |