Oracle9i PHP 操作 CLOB字段
来源:互联网 发布:java截取字符串拼接 编辑:程序博客网 时间:2024/06/04 19:32
场景描述:
将oracle11g的含clob字段的数据抽取到oracle9i,发现oracle9i对clob的支持没11g的强大,导致php进行入库操作时报错
从网上找到的解决办法,每行记录包含一个clob字段比较好解决,但是包含多个clob字段,不太好解决,目前没找到好的解决办法,、
以下是从网上查到的资料
1. 单个clob操作,转载地址:http://www.cnblogs.com/jiafan/archive/2008/06/23/1228300.html
如果接触过mysql的话一定对mysql的text和blob不会陌生,在mysql中是直接操作text和blob的;
但是在oracle中,它把lob做为一种特殊的字段,不能直接进行操作--比如不能直接插入到lob字段中,也不能用like查询等等。
不能直接用INSERT语句向LOB字段中插入值。一般情况下,有如下的几步:
1 先分析一个INSERT语句,返回一个LOB的描述符
2 用OCI函数
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)) //把要入库的变量初始化到这里$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---------------------------------------
2. 同时操作多个字段,转载地址:http://cshongyin.blog.163.com/blog/static/16818875920123159524908/
在php使用了oci接口连接oracle,结果发现插入一组数据的时候不能同时插入多个clob变量,
PHP:OCI :Manue中给出的例子是:
// Before running, create the table:
// CREATE TABLE mytab (mykey NUMBER, myclob CLOB);
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$mykey = 12343; // arbitrary key for this example;
$sql = "INSERT INTO mytab (mykey, myclob)
VALUES (:mykey, EMPTY_CLOB())
RETURNING myclob INTO :myclob";
$stid = oci_parse($conn, $sql);
$clob = oci_new_descriptor($conn, OCI_D_LOB);
oci_bind_by_name($stid, ":mykey", $mykey, 5);
oci_bind_by_name($stid, ":myclob", $clob, -1, OCI_B_CLOB);
oci_execute($stid, OCI_DEFAULT);
$clob->save("A very long string");
oci_commit($conn);
// Fetching CLOB data
$query = 'SELECT myclob FROM mytab WHERE mykey = :mykey';
$stid = oci_parse ($conn, $query);
oci_bind_by_name($stid, ":mykey", $mykey, 5);
oci_execute($stid);
print '<table border="1">';
while ($row = oci_fetch_array($stid, OCI_ASSOC)) {
$result = $row['MYCLOB']->load();
print '<tr><td>'.$result.'</td></tr>';
}
print '</table>';
?>
// Before running, create the table:
// CREATE TABLE mytab (mykey NUMBER, myclob CLOB, mycc CLOB);
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$mykey = 12343; // arbitrary key for this example;
$sql = "INSERT INTO mytab (mykey, myclob, mycc)
VALUES (:mykey, EMPTY_CLOB(), EMPTY_CLOB())
RETURNING myclob INTO :myclob";
$stid = oci_parse($conn, $sql);
$clob = oci_new_descriptor($conn, OCI_D_LOB);
oci_bind_by_name($stid, ":mykey", $mykey, 5);
oci_bind_by_name($stid, ":myclob", $clob, -1, OCI_B_CLOB);
oci_execute($stid, OCI_DEFAULT);
$clob->save("A very long string1");
oci_commit($conn);
RETURNING mycc INTO :mycc";
$stid = oci_parse($conn, $sql);
$clob = oci_new_descriptor($conn, OCI_D_LOB);
oci_bind_by_name($stid, ":mycc", $clob, -1, OCI_B_CLOB);
oci_execute($stid, OCI_DEFAULT);
$clob->save("A very long string2");
oci_commit($conn);
// Fetching CLOB data
$query = 'SELECT myclob, mycc FROM mytab WHERE mykey = :mykey';
$stid = oci_parse ($conn, $query);
oci_bind_by_name($stid, ":mykey", $mykey, 5);
oci_execute($stid);
print '<table border="1">';
while ($row = oci_fetch_array($stid, OCI_ASSOC)) {
$result = $row['MYCLOB']->load();
print '<tr><td>'.$result.'</td>';
print '<td>'.$result.'</td></tr>';
}
print '</table>';
?>虽然解决了,但是如果有n个CLOB,就需要n次update,显然效率非常低,期待好的做法
- Oracle9i PHP 操作 CLOB字段
- ibatis操作clob字段(oracle9i,ibatis2.3)
- ORACLE 操作 CLOB 字段
- Hibernate操作CLOB字段
- ORACLE 操作 CLOB 字段
- ORACLE 操作 CLOB 字段
- ORACLE 操作 CLOB 字段
- oracle9i clob字段插入 报错ORA-01461
- java 操作ORACLE Clob字段
- 对clob字段的操作
- JDBC操作Clob,Blob字段
- ORacle中Clob字段操作
- Spring+hibernate+Oracle9i+CLOB
- spring+hibernate里面操作clob字段
- oracle中对clob字段的操作
- J2EE操作Oracle的clob类型字段
- JAVA操作Oracle中CLOB字段
- J2EE操作Oracle的clob类型字段
- 说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
- 连接数据库需要注意的
- SendMessage、PostMessage原理
- Java笔试
- Oracle常用函数总结
- Oracle9i PHP 操作 CLOB字段
- Android可视化开发工具,包括设计GUI,图标ICON,字体等的工具集合
- 我自己的Extjs的获取grid 的表格内容的办法
- Oracle 中读写 DATE 类型字段时用到的日期转换函数
- 【转载】解读USB-IF电池充电规范
- Android 多线程更新控件
- gdb:循环打印数组
- CF 61 div2 D. Petya and His Friends
- Android横竖屏切换总结