如果接觸過mysql的話一定對mysql的text和blob不會陌生,在mysql中是直接操作text和blob的。但是在oracle中,它把lob做為一種特殊的欄位,不能直接進行操作--比如不能直接插入到lob欄位中,也不能用like查詢等等。
不能直接用INSERT語句向LOB欄位中插入值。一般情況下,有如下的幾步:
1 先分析一個INSERT語句,返回一個LOB的描述符
2 用OCI函數產生一個本地的LOB對象
3 將LOB對象綁定到LOB描述符上
4 執行INSERT語句
5 給LOB對象賦值
6 釋放LOB對象和SQL語句控制代碼
/*
//(tabel_name:article)DDL; //just for test;
//create table article(id number(11),content clob);
*/
//----------This is insert test----------------------------------
$conn = @OCILogon("YourUsername","YourPassword","YourDatabase");
$stmt = @OCIParse($conn,"insert into article values(1,EMPTY_CLOB()) RETURNING content INTO:CONTENT");
$clob = @OCINewDescriptor($conn,OCI_D_LOB);
OCIBindByName($stmt,':CONTENT',&$clob,-1,OCI_B_CLOB);
if(!OCIExecute($stmt, OCI_DEFAULT)) {print_r(OCIError($stmt));}
if($clob->save($CONT))
{
OCICommit($conn);
}
else
{
print_r(OCIError($stmt));
}
//---------------Insert end-----------------------------------------
//---------------Select start---------------------------------------
$sql = "select content from article order by id desc";
$stmt = @OCIParse($conn,$sql);
@OCIExecute($stmt,OCI_DEFAULT);
@OCIFetchInto($stmt,&$rows,OCI_RETURN_LOBS);
echo "<br>Content is:\"".$rows[0]."\"";
//---------------Select end-----------------------------------------
注意:測試時一定注意Oracle的保留關鍵字,經常使用OCIError來差錯。