json JSON_ELEMENT_T oracle pl CHARACTER SET解析ISO88591

时间:2018-06-15 00:08:26

标签: json oracle plsql

我在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,我得到了同样的错误

2 个答案:

答案 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