Oracle CLOB更新在低于字符限制的内容上失败
我正在尝试使用ColdFusion 8中的表单输入更新CLOB字段。提交的数据大小不超过10KB,但我得到了Oracle CLOB更新在低于字符限制的内容上失败,oracle,coldfusion,clob,Oracle,Coldfusion,Clob,我正在尝试使用ColdFusion 8中的表单输入更新CLOB字段。提交的数据大小不超过10KB,但我得到了ORA-01704:string literal太长的错误 <cfquery name="updatePubs" datasource="#authConfig.getConfigSetting('datasource')#"> UPDATE members SET publication = '#publications#' WHERE campus_key =
ORA-01704:string literal太长的错误
<cfquery name="updatePubs" datasource="#authConfig.getConfigSetting('datasource')#">
UPDATE members
SET publication = '#publications#'
WHERE campus_key = #id#
</cfquery>
更新成员
设置发布=“#发布#”
其中campus_key=#id#
有没有其他方法可以做到这一点?对于4KB以下的数据,它可以正常更新,但如果数据超过4KB,则会抛出错误。请尝试使用
标记在查询中包装变量。像这样:
<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
类型为integer
标记执行以下操作:
- 允许使用SQL绑定参数,从而提高性能
- 确保变量数据与指定的SQL类型匹配
- 允许从SQL语句更新长文本字段
- 转义字符串变量中的单引号
要从绑定变量的增强性能中获益,请对所有ColdFusion变量使用cfqueryparam,并且您的DBMS必须支持绑定变量。如果DBMS不支持绑定参数,ColdFusion将验证并将验证后的参数值替换回字符串。如果验证失败,它将返回一条错误消息
这里有一个链接,指向尝试用
标记包装查询中的变量。像这样:
<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
类型为integer
标记执行以下操作:
- 允许使用SQL绑定参数,从而提高性能
- 确保变量数据与指定的SQL类型匹配
- 允许从SQL语句更新长文本字段
- 转义字符串变量中的单引号
要从绑定变量的增强性能中获益,请对所有ColdFusion变量使用cfqueryparam,并且您的DBMS必须支持绑定变量。如果DBMS不支持绑定参数,ColdFusion将验证并将验证后的参数值替换回字符串。如果验证失败,它将返回一条错误消息
这里是指向的链接。您确定由#authConfig.getConfigSetting('datasource')#
返回的数据源已在ColdFusion管理员中启用CLOB吗?是的,此数据源已启用。您是否尝试使用
标记?您确定由#authConfig.getConfigSetting返回的数据源是否已启用CLOB(“数据源”)#
是否在ColdFusion administrator中启用了CLOB?是的,此数据源启用了CLOB。您是否尝试过使用
标记?太棒了!我假设通过此更新,它在大小限制方面将非queryparam变量处理得更接近varchar2?我假设是这样。通过使用
ColdFusion将验证数据类型and对于支持绑定变量的DBMS,它可以在准备SQL语句时执行此操作。使用标记的双重奖励也有助于保护您免受某些SQL注入攻击。我将在文档中对我的答案添加更多内容。您的问题需要特别注意的是第三个项目。太棒了!我假设通过此更新,它将处理非querypar变量在大小限制方面是否更接近varchar2?我假设是这样的。通过使用
ColdFusion将验证数据类型,对于支持绑定变量的DBMS,它可以在准备SQL语句时验证数据类型。使用标记的双重加值也有助于保护您免受某些SQL注入攻击。我将添加一个bi从文件中我的回答就不多了。特别要注意的是第三个问题。