Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JSON_OBJECT_T OBJECT中放入空字符串?_Json_Oracle_Plsql_Oracle12c_Oracle18c - Fatal编程技术网

如何在JSON_OBJECT_T OBJECT中放入空字符串?

如何在JSON_OBJECT_T OBJECT中放入空字符串?,json,oracle,plsql,oracle12c,oracle18c,Json,Oracle,Plsql,Oracle12c,Oracle18c,我试图使用以下代码将空字符串添加到JSON\u OBJECT\T,但我得到的是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; 当我这样做时,我得到以下json {"customerAccRef":null} 我希望输出

我试图使用以下代码将空字符串添加到
JSON\u OBJECT\T
,但我得到的是
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;
当我这样做时,我得到以下json

{"customerAccRef":null}
我希望输出如下

{"customerAccRef":""}

有人能建议我需要做什么更改来传递空字符串吗?

发生这种情况的原因是Oracle在内部将空字符串更改为
NULL
值。这是由于一些遗留的原因,你可以通过阅读了解历史

我在JSON文档中找不到任何可以绕过这个特定问题的选项,尽管如果有人能找到它,我会很高兴

作为解决问题的方法,您可以使用
TRIM
函数将单个空格转换为空白字符串

V_OBJ.PUT('customerAccRef' , TRIM(' '));

{"customerAccRef":""}
这似乎在Oracle 12.2版本中都有效;我在本地机器和Oracle中进行了测试 18c:,以及


这里还需要注意的一点是,一个简单的
从dual
选择TRIM(“”)总是返回
NULL
,这对您来说是令人惊讶和幸运的,它与JSON一样工作

谢谢,我也想到了同样的方法,但正在检查是否可以不调用任何函数?你对我的其他职位有什么建议吗@KinjanBhavsar:很抱歉。我认为我永远无法回答与Oracle JSON相关的问题(或任何SQL),而Chris Saxon无法回答(在您添加问题细节后,他还没有回答)。你可能会问一个新问题,将前一个问题与所需的细节联系起来,也许他或其他人可以帮助你。关于这个特定的问题,您可以决定是否等待其他答案(可能是Chris自己可以,不使用
TRIM
)或继续进行此操作。我使用了您提供的解决方法及其工作原理。也谢谢你,如果你能给我提些建议,那将是一个很大的帮助。