Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > работа с CLOB-ами


Автор: sagow 18.5.2010, 10:06
Столкнулся с проблемой.

Есть простейшая процедура работы с clob

Код

$db = OCILogon($user, $password);

$sql = "begin   SText.SetText( :id, :sMessage); end;";

$s = OCIParse($db, $sql);

$clob = OCINewDescriptor($db, OCI_D_LOB);

OCIBindByName($s, ':id', $id);

OCIBindByName($s, ':sMessage', $clob, -1, OCI_B_CLOB);

$clob->WriteTemporary($value);

OCIExecute($s, OCI_DEFAULT);

OCICommit($db);

$clob->close();

$clob->free();

OCIFreeStatement($s);



Всё бы хорошо и работает на локале, НО на сервере стоит старый клиент и WriteTemporary - выдаёт ошибку что не найден (Call to undefined method OCI-Lob::WriteTemporary() ). В интернете нашёл только 2 примера, работа с update insert, и с хранимыми процедурами через  WriteTemporary.
Есть ещё способы работы с процедурами без WriteTemporary?.

Автор: sagow 18.5.2010, 15:07
Может и пригодиться кому. Чтоб время зря не терять.

как реализовал.

Код

$db = OCILogon($user, $password);

$sql = "begin   SText.SetText( :id, :sMessage); end;";
$s = OCIParse($db, $sql);
OCIBindByName($s, ':id', $id);
$clob = createClobTemporary($db,$value);
OCIBindByName($s, ':sMessage', $clob, -1, OCI_B_CLOB);
OCIExecute($s, OCI_DEFAULT);
OCICommit($db);
$clob->free();
OCIFreeStatement($s);


function createClobTemporary($db = null,$value=null){
$sql = "
begin
 dbms_lob.createtemporary( :cl, true );
end;
";

$s = OCIParse($db, $sql);
$clob = OCINewDescriptor($db, OCI_D_LOB);
OCIBindByName($s, ':cl', $clob, -1, OCI_B_CLOB);
OCIExecute($s, OCI_DEFAULT);
$clob->write($value);
return $clob;
}



p.s $clob->close(); - тоже не работает, пришлось отказаться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)