我有一个多列的表,其数据类型在oracle中是blob。现在如何将多个 blob 数据插入表中。以下是示例,但这里只有一种 Blob 列类型,但我有多个 Blob 列。
$lob = oci_new_descriptor($conn, OCI_D_LOB);
$stmt = oci_parse($conn, 'INSERT INTO BTAB (BLOBID, BLOBDATA) '
.'VALUES(:MYBLOBID, EMPTY_BLOB()) RETURNING BLOBDATA INTO :BLOBDATA');
oci_bind_by_name($stmt, ':MYBLOBID', $myblobid);
oci_bind_by_name($stmt, ':BLOBDATA', $lob, -1, OCI_B_BLOB);
oci_execute($stmt, OCI_DEFAULT);
尝试这样的事情:
<?php
// create table t (b1 blob, b2 blob);
error_reporting(E_ALL);
ini_set('display_errors', 'On');
$c = oci_connect('cj', 'xxxx', 'localhost/orclpdb1');
if (!$c) {
$m = oci_error();
trigger_error('Could not connect to database: '. $m['message'], E_USER_ERROR);
}
$sql = <<<'END'
insert into t (b1, b2)
values (empty_blob(), empty_blob())
returning b1, b2 into :myblob1, :myblob2
END;
$stmt = oci_parse($c, $sql);
$lob1 = oci_new_descriptor($c, OCI_D_LOB);
$lob2 = oci_new_descriptor($c, OCI_D_LOB);
oci_bind_by_name($stmt, ':myblob1', $lob1, -1, OCI_B_BLOB);
oci_bind_by_name($stmt, ':myblob2', $lob2, -1, OCI_B_BLOB);
oci_execute($stmt, OCI_DEFAULT);
$lob1->write('My first BLOB');
$lob2->write('My second BLOB');
oci_commit($c);
$lob1->free();
$lob2->free();
$s = oci_parse($c, "select * from t");
oci_execute($s, OCI_DEFAULT);
$arr = oci_fetch_assoc($s);
$b1 = $arr['B1']->load();
$b2 = $arr['B2']->load();
print $b1 . "\n" . $b2;
?>
输出为:
$ php t.php
My first BLOB
My second BLOB