Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle CLOB更新在低于字符限制的内容上失败_Oracle_Coldfusion_Clob - Fatal编程技术网

Oracle CLOB更新在低于字符限制的内容上失败

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 =

我正在尝试使用ColdFusion 8中的表单输入更新CLOB字段。提交的数据大小不超过10KB,但我得到了
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从文件中我的回答就不多了。特别要注意的是第三个问题。