background image

还有一个要注意的地方:

LOB 字段的值最少要 1 个字符,所以在 save()或 savefile()之前,

要确保值不能为空。否则

,Oracle 会出错。

取出

对一个

LOB 中取出数据,有两种办法。一是生成一个 LOB 对象,然后绑定到一条 SELECT

语 句 返 回 的 定 位 符 上 , 再 用

LOB 对 象 的 load() 方 法 取 出 数 据 ; 二 是 直 接 用 PHP 的

OCIFetch***函数。第一种方法比第二种方法要麻烦得多,所以我直接说说第二种方法。

还是用上面的表。

<?php
$conn=OCILogon($user,$password,$SID);
$stmt=OCIParse($conn,"SELECT*FROMPICTURESWHEREID=$pictureid");
OCIExecute($stmt);
//秘密就在 PCIFetchInfo 的第三个参数上:OCI_RETURN_LOBS。第三个参数是 FETCH 的
模式,如果

OCI_RETURN_LOBS,就直接把 LOB 的值放到结果数组中,而不是 LOB 定位

符,也就不用

LOB 对象的 load()方法了。

if(OCIFetchInto($stmt,$result,OCI_ASSOC OCI_RETURN_LOBS))
{
echo"Content-type:".StripSlashes($result[MIME]);
echoStripSlashes($result[PICTURE]);
}
OCIFreeStatement($stmt);
OCILogoff($conn);
?>

这 个 程 序 用 来 显 示 放 在

LOB 中 的 数 据 ( 图 片 ) 。 调 用 方 法 ( 假 设 脚 本 名 是

getpicture.php):
<IMGSRC="getpicture.php?pictureid=99"ALT="放在 OracleLOB 中的图片">

查询

前面已经提了下,对于

Oracle 的 LOB 字段是不能用 LIKE 进行匹配的。怎么办呢?其实并

不复杂,

Oracle 有一个匿名的程序包,叫 DBMS_LOB,里面有所有的操作 LOB 所需的过

程。

假设有象这样一个表

:

CREATETABLEARTICLES(
IDNUMBER,
TITLEVARCHAR2(100),
CONTENTCLOB
);