读书人

【】Oracle 数据库中 blob字段有关问题

发布时间: 2012-02-06 15:52:45 作者: rapoo

【求助】Oracle 数据库中 blob字段问题
winform做照片存储到Oracle中时遇到更新数据卡死的状况,如果不停止会直接报连接超时的错误,
如果强制停止可以看到该字段有值。但是该条数据一直被占用锁死。

图片大小都不大 ,只有2k-4k左右。且已经转换为byte型。


OracleParameter[] parameters = new OracleParameter[2];
parameters[0] = new OracleParameter("p_customersn", OracleDbType.Varchar2);
parameters[0].Value = customerSn;
parameters[1] = new OracleParameter("p_photo", OracleDbType.Blob, photo.Length);
parameters[1].Value = photo;
OracleHelper.ExecuteNonQuery(Program.connectionString, CommandType.StoredProcedure, "update_photp", parameters);


sql试过两种写法:
1、这种写法可以存进去,但是一直占用,无法停止。
PROCEDURE update_photp (p_customersn IN VARCHAR2, p_photo IN BLOB)
IS
BEGIN
--取出blob对象
UPDATE spe_customer
SET photo = p_photo
WHERE customer_sn = p_customersn;
END;
2、这种写法一个字也存不进去
PROCEDURE update_photp (p_customersn IN VARCHAR2, p_photo IN BLOB)
IS
lobloc BLOB;
query_str VARCHAR2 (1000);
BEGIN
--取出blob对象
UPDATE spe_customer
SET photo = EMPTY_BLOB ()
WHERE customer_sn = p_customersn;

query_str :=
'select photo from spe_customer where customer_sn= :id for update ';

EXECUTE IMMEDIATE query_str
INTO lobloc
USING p_customersn;

--更新
DBMS_LOB.WRITE (lobloc, UTL_RAW.LENGTH (p_photo), 1, p_photo);
--COMMIT;
END;

请问大家遇到过这种现象吗?

是什么原因导致的?是写法问题,还是数据库有什么问题?

谢谢了 很紧急!~ 非常感谢~~~

[解决办法]
用PL SQL DEV工具可以更新进去>?
可以的话就是你的程序有问题,可能转换有问题,不行的话,看看报什么错误
[解决办法]
没用过C#,参考一下:
1.http://lveyo.javaeye.com/blog/175727
2.http://blog.sina.com.cn/s/blog_4b9d73ad010008f2.html

读书人网 >oracle

热点推荐