CLOB更新失败,内容低于字符限制

时间:2013-08-06 19:59:09

标签: oracle coldfusion clob

我正在尝试使用ColdFusion 8中的表单输入更新CLOB字段。提交的数据大小不超过10KB,但我收到ORA-01704: string literal too long错误。

<cfquery name="updatePubs" datasource="#authConfig.getConfigSetting('datasource')#">
  UPDATE members
  SET publication = '#publications#'
  WHERE campus_key = #id#
</cfquery>

有替代方法吗?它仅对低于4KB的数据进行了更新,但高于此值则会引发错误。

1 个答案:

答案 0 :(得分:2)

尝试使用<cfqueryparam>标记包装查询中的变量。像这样:

<cfquery name="updatePubs" datasource="#authConfig.getConfigSetting('datasource')#">
  UPDATE members
  SET publication = <cfqueryparam cfsqltype="CF_SQL_CLOB" value="#publications#">
  WHERE campus_key = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#id#">
</cfquery>

请注意,我假设您的id在我的示例中是整数类型。

<cfqueryparam>标记执行以下操作:

  • 允许使用SQL绑定参数,从而提高性能。
  • 确保变量数据与指定的SQL类型匹配。
  • 允许从SQL语句更新长文本字段。
  • 转义字符串变量中的单引号。

要从绑定变量的增强性能中受益,请对所有ColdFusion变量使用cfqueryparam,并且您的DBMS必须支持绑定变量。如果DBMS不支持绑定参数,ColdFusion将验证并将验证的参数值替换回字符串。如果验证失败,则返回错误消息。

以下是documentation for cfqueryparam

的链接