我在Oracle数据库12.2.1中解析JSON。它适用于utf8字符,但使用'tilde'等字符(例如é,ó)它不起作用,我得到ORA-40441 JSON Syntax
错误。我的数据库是NLS_CHARACTERSET=WE8ISO8859P1
。这是代码。谢谢。
DECLARE
vjeData JSON_ELEMENT_T;
BEGIN
vjeData := JSON_ELEMENT_T.parse(' { "color": "CANCIÓN" } ');
DBMS_OUTPUT.put_line('vjeData ' || vjeData.TO_STRING);
END;'
更新
我设置了我的Windows客户端系统变量NLS_LANG = AMERICAN_AMERICA.WE8ISO8859P1,我得到了同样的错误
答案 0 :(得分:0)
来自oracle docs:
静态函数解析接受VARCHAR2,CLOB或类型的实例 BLOB作为参数,它作为JSON文本解析以返回实例 类型为JSON_ELEMENT_T,JSON_OBJECT_T或JSON_ARRAY_T。对于BLOB,你 只能使用编码为UTF-8的数据。如果是,则会引发错误 解析输入不是格式良好的JSON数据或编码不是UTF-8。
这意味着,如果传递varchar2,则必须使用数据库字符集进行编码。因此,您必须确保客户端的NLS_LANG设置与实际使用的字符集编码(客户端)匹配。
如果您想使用UTF8并希望防止由于客户端NSL_LANG与数据库字符集不同而导致编码被更改,则需要将其作为BLOB提供。
答案 1 :(得分:0)
这是oracle报告的错误,JSON错误ORA-40474(文档ID 2363165.1),解决方案:
解 字符集应为UTF8 DB。
https://support.oracle.com/knowledge/Oracle%20Database%20Products/2363165_1.html