0

我正在尝试使用 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 的数据更新得很好,但高于它会引发错误。

4

1 回答 1

3

尝试使用标签将变量包装在查询中<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 将验证并将验证的参数值替换回字符串中。如果验证失败,则返回错误消息。

这是cfqueryparam 文档的链接

于 2013-08-06T20:19:36.377 回答