我正在尝试使用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的数据进行了更新,但高于此值则会引发错误。
答案 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>
标记执行以下操作:
要从绑定变量的增强性能中受益,请对所有ColdFusion变量使用cfqueryparam,并且您的DBMS必须支持绑定变量。如果DBMS不支持绑定参数,ColdFusion将验证并将验证的参数值替换回字符串。如果验证失败,则返回错误消息。
的链接