还有一个要注意的地方:
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
);