2016-04-06 3 views
-1

Имея много проблем с Oracle сегодня.Не удается вставить в CLOB, 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 

Bound: (с помощью РНР 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 и он все еще не может держать свою строку ..

Error: SQLSTATE[HY000]: General error: 1461 OCIStmtExecute: ORA-01461: can bind a LONG value only for insert into a LONG column (/core-php-src-5.2.5/php-5.2.5/ext/pdo_oci/oci_statement.c:146)

Является ли Oracle способна обработки моих данных таким образом, что я смогу выполнить поиск по нему позже? Если да, то как?

+0

Возможно, Oracle не является правильной БД ... Вы должны использовать Google для базы данных объектов – quazardous

+0

Oracle - это все, что доступно для этого проекта. Сохранить для файловой системы .. –

+0

хорошо Oracle также хранит данные в файлах: p у вас есть Oracle FS, если хотите. Oracle DBfs! – quazardous

ответ

2

Вы не можете вставлять blob как обычные типы. Вам необходимо связать файловый дескриптор или дескриптор потока. http://php.net/manual/en/pdo.lobs.php

Для кастинга вы можете использовать пакет utl_raw в своем выборе: utl_raw.cast_to_varchar2.

Но он ограничен длиной max varchar2.

+0

Так что в принципе, мне нужно будет хранить мои капли в файле в любом случае, не так ли? –

+0

Нет, вам нужно открыть файл дескриптора, поток или память – quazardous

+0

Но я понимаю, что вы не можете выполнить поиск по столбцу * LOB правильно? –

Смежные вопросы