【问题标题】:ORA-01704 String literal too long when using with Code IgniterORA-01704 与 Codeigniter 一起使用时字符串文字太长
【发布时间】:2012-02-01 03:59:02
【问题描述】:

目前我正在使用 Code Igniter 和 Oracle 数据库开发 Web 应用程序。当我尝试为 CLOB 列插入长字符时出现错误

ORA-01704 字符串文字太长

如何在 CI 中解决这个问题?

假设我在 oracle 中有这样的表

CREATE TABLE test(
   ID NUMBER,
   SUMMARY CLOB
)

当我尝试通过此命令使用 CI 插入一行(SUMMARY 列超过 4000 cahr)时

$this->db->set('ID','123');
$this->db->set('SUMMARY','Very long text is here');
$this->db->insert('test');

我收到了string literal is too long

我使用 Oracle 10g

【问题讨论】:

  • 向我们展示您的工作方式和内容
  • 您使用的是 pdo_oci 还是 oci8 扩展?您要连接的 Oracle 版本是什么?
  • 你试过查找错误号吗?有很多文章描述了它的发生和可能的修复,比如dba-oracle.com/t_ora_01704_string_literal_too_long.htm
  • 我已经在谷歌搜索过如何解决这个问题。但我什么也没找到。我也找到了你从谷歌给我的网址,但我无法访问该网址。我不知道为什么

标签: php oracle codeigniter ora-01704


【解决方案1】:
ORA-01704: string literal too long
Cause: The string literal is longer than 4000 characters.
Action: Use a string literal of at most 4000 characters.
Longer values may only be entered using bind variables.

当插入/更新超过 4000 个字符的 CLOB 值时,需要使用绑定参数。

我不是 Code Igniter 用户,但检查 Code Igniter 的数据库抽象类显示它doesn't use prepared statements and real variable binding(顺便说一句:因为这个,我不会使用 Code Igniter 框架......)。

因此,结论是您不能使用 Code Igniter 的帮助器进行数据库交互来做您想做的事情,至少在不重写它的一些代码的情况下是这样。我相信在这种特殊情况下,您必须使用"pure" PDO interface

【讨论】:

  • 是的,你是对的。我使用了 PDO 接口,它的工作。谢谢
  • @Furgas :我遇到了类似的问题,您为纯 PDO 接口提供的链接不起作用。请您重新发布有效链接。谢谢...
  • abuzuhair,请您帮我解决到目前为止您为解决此问题所做的工作吗?
  • @KusH:我已经修复了链接。
  • @Furgas :我也尝试过 PDO。适用于少于 4000 个字符的字符串。不适用于包含 4000 个字符加 . 的字符串
猜你喜欢
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多