Two examples of retrieving CLOBs from the database. They are almost identical. The first is using a package(and cursor) which is how I interface to Oracle at work, and the second is using straight SQL, which most people post examples in.
I also convert the case from upper to lower, since that is how I prefer to work with assoc arrays...
Instead of using the get_class() function you could use the OCIColumnType() function which (in this case) would return 'CLOB' as a result...
/**
* Example 1
*
* Using a PL/SQL package and cursor
*
*/
$cursor=':p_cur';
$sql2="begin clobPackage.getClob($cursor); end;";
$curs=OCINewCursor($conn);
$stmt=OCIParse($conn,$sql2);
OCIBindByName($stmt,$cursor,&$curs,-1,OCI_B_CURSOR);
OCIExecute($stmt,OCI_DEFAULT);
OCIExecute($curs,OCI_DEFAULT);
$x=0;
while(OCIFetch($curs)){
$cols=OCINumCols($curs);
for($i=1;$i<=$cols;$i++){
$column_name=OCIColumnName($curs,$i);
if(is_object($tmp=OCIResult($curs,$i))&&get_class($tmp)=='OCI-Lob'){
$column_value=$tmp->load();
}else{
$column_value=$tmp;
}
$result[$x][strtolower($column_name)]=trim($column_value);
}
$x++;
}
OCICommit($conn);
/**
* Example 2
*
* Using a SELECT
*
*/
$query="SELECT a_num, a_clob FROM clob_test";
$stmt=OCIParse($conn,$query);
OCIExecute($stmt,OCI_DEFAULT);
$x=0;
while(OCIFetch($stmt)){
$ncols=OCINumCols($stmt);
for($i=1;$i<=$ncols;$i++){
$column_name=OCIColumnName($stmt,$i);
if(is_object($tmp=OCIResult($curs,$i))&&get_class($tmp)=='OCI-Lob'){
$column_value=$tmp->load();
}else{
$column_value=$tmp;
}
$result[$x][strtolower($column_name)]=trim($column_value);
}
$x++;
}
OCICommit($conn);
I hope someone finds this useful.
Cheers,
Keith.