【问题标题】:Can't insert into CLOB, Oracle无法插入 CLOB,Oracle
【发布时间】:2016-04-06 19:10:25
【问题描述】:

今天在 Oracle 上遇到了很多麻烦。

我正在尝试将大字符串插入 CLOB 字段,得到ORA-01461: can bind a LONG value only for insert into a LONG column

但是……已经是CLOB了,为什么还要我用LONG呢?

表定义:

CREATE TABLE crawler (
        ID NUMBER(10,0) NOT NULL ENABLE,
        TITLE CLOB NOT NULL ENABLE,
        URL VARCHAR2(2000) NOT NULL ENABLE,
        BODY CLOB NOT NULL ENABLE,
        DEPTH NUMBER(10,0) DEFAULT 1 NOT NULL ENABLE,
        UPDATED NUMBER(10,0) NOT NULL ENABLE,
        LINKED_FROM CLOB NOT NULL ENABLE,
        CRAWLED NUMBER(10,0) DEFAULT 0 NOT NULL ENABLE,
        CONSTRAINT crawler_pk PRIMARY KEY (id),
        CONSTRAINT crawler_uni UNIQUE (url)
    );

问题陈述:

UPDATE sindex SET title = :title, body = :body, depth = :depth, updated = :updated, linked_from = :linked_from, crawled = :crawled WHERE url = :url

绑定:(通过 PHP 的var_dump()

array
  ':url' => string 'https://rockwell.ourtownamerica.com/' (length=36)
  ':title' => string 'Unknown Title' (length=13)
  ':body' => string 'Intranet | Our Town America Marketing Business/Order Forms Direct Mail Download Logos E-Mail Marketing Graphics Clipart Graphic Forms Graphics Samples Our Town Web Store Proofs Sales Dashboard Sales & Marketing Tools Sales Report Testimonials Vendor Portal Sites You Tube Information Current Unordered Zips Deadlines Extra Names Available EDDM Quote Graphics Status Historical Name Search Invoice Inserts Latest News Maps Console Media Archive National Survey Results Offer Research Current vs Proven Offer My Be'... (length=4509)
  ':depth' => string '0' (length=1)
  ':updated' => int 1459969041
  ':linked_from' => null
  ':crawled' => int 1

如何做到这一点?另外,我还需要在此列上进行搜索,所以可能 CLOB 不是正确的类型,但它是最大的 AFAIK,它仍然无法容纳我的字符串..

错误:SQLSTATE[HY000]:一般错误:1461 OCIStmtExecute:ORA-01461: 只能绑定 LONG 值以插入 LONG 列 (/core-php-src-5.2.5/php-5.2.5/ext/pdo_oci/oci_statement.c:146)

Oracle 是否能够以我以后可以搜索的方式处理我的数据?如果有,怎么做?

【问题讨论】:

  • 也许 Oracle 不是正确的数据库...您应该在对象数据库上谷歌
  • Oracle 是该项目可用的全部。保存文件系统..
  • 好吧,Oracle 也将数据存储在文件中:p 如果需要,您可以使用 Oracle FS。 Oracle DBfs !

标签: php oracle pdo


【解决方案1】:

您不能像常见类型那样直接插入 blob。您必须绑定文件描述符或流描述符。 http://php.net/manual/en/pdo.lobs.php

对于强制转换,您可以在选择中使用 utl_raw 包:utl_raw.cast_to_varchar2。

但仅限于 varchar2 的最大长度。

【讨论】:

  • 所以基本上,无论哪种方式,我都必须将我的 blob 存储在一个文件中,对吧?
  • 不,您必须打开描述符文件、流或内存
  • 但是我的理解是您不能在 *LOB 列上搜索正确吗?
  • 你必须安装一些特定的包。几年前,我使用 Oracle 的全文索引包完成了这项工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 2012-10-27
  • 2015-12-04
相关资源
最近更新 更多