Oracle 使用N个函数问题更新NClob

Oracle 使用N个函数问题更新NClob,oracle,sql-update,nclob,Oracle,Sql Update,Nclob,我正在使用N函数更新SQL查询中的NClob。但是,updateusingn函数不允许我更新超过1900个字符。删除N函数后。我能够将1900多个字符更新到我的NClob列 有人能帮我解释为什么我不能使用N函数更新NClob列吗?有什么限制吗 代码是 StringBuilder updateQuery=新建StringBuilder(“更新表名称集列名称=”); append(“=N”).append(NClobContent.append(“”).append(“”).append(“,”);

我正在使用N函数更新SQL查询中的NClob。但是,updateusingn函数不允许我更新超过1900个字符。删除N函数后。我能够将1900多个字符更新到我的NClob列

有人能帮我解释为什么我不能使用N函数更新NClob列吗?有什么限制吗

代码是

StringBuilder updateQuery=新建StringBuilder(“更新表名称集列名称=”); append(“=N”).append(NClobContent.append(“”).append(“”).append(“,”); ps.execute(updateQuery.toString())

如前所述:

  • 文本文字的最大长度为4000字节
N表示文本使用的是国家字符集,该字符集将是UTF8或AL16UTF16(默认情况下为后者),因此,即使长字符串的字符数少于4000个,也可以超过4000字节

如果不使用N,字符串将在数据库角色集中解释,文字将在存储在NCLOB中时转换为国家角色集。因此,可能会有更长的字符串-如果数据库字符集为单字节,则最多可以有4000个字符,尽管
NClobCOntent
变量中的任何多字节字符都会损坏


不要使用N语法,而是将变量传递给数据库;你可能会找到一个有用的起点。或者您可以使用,具体取决于字符串长度。

请显示代码和错误。这是一个简单的更新语句,如下所示-更新表\u name set column\u name=N“长度超过4000个字符的字符串”,其中rowid=12345我得到的错误是“字符串文字太长”,请编辑您的问题,然后在其中发布代码,而不是注释,并显示调用此的代码。我已使用代码编辑了问题。当我使用cstmt.setCharacterStream()时,后端函数(接收NCLOB)无法保存unicode字符。执行所有这些操作的全部目的是将unicode字符(如日语或俄语字符)存储在NCLOB中,使用stream,我无法将其传递到后端。