存储过程里如何操作插入CLOB字段?
表T中有个字段CLOB,在存储过程里如何往CLOB字段插数据,
我是要在ASP.NET中调用这个存储过程
OracleParameter artcontent = new OracleParameter("CONTENT", OracleType.Clob);
artcontent.Value=string(类型)
存储过程如下:
create or replace procedure P_ARTICLE(ID VARCHAR2
CONTENT CLOB) as
--添加文章
nowtime varchar2(20);
begin
Select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') into nowtime from dual;
insert into T_NEWS_ARTICLE
(ID,ART_CONTENT,)
values
(ID,W_ART_CONTENT);
commit;
end P_ARTICLE;
上面的用法,如果CONTENT小的情况下,没问题,如果文本量大,就提示"请求的转换失败"
如何在存储过程里面实现呢?
有人说是先存入一个空的CLOB类型,再修改该字段,可是传过来的是OracleType.Clob类型,该如何在过程里操作呢,我是想在过程里修改?
弄两天了....急!!!!
求达人!!!
表T中有个字段CLOB,在存储过程里如何往CLOB字段插数据,
我是要在ASP.NET中调用这个存储过程
OracleParameter artcontent = new OracleParameter("CONTENT", OracleType.Clob);
artcontent.Value=string(类型)
存储过程如下:
create or replace procedure P_ARTICLE(ID VARCHAR2
CONTENT CLOB) as
--添加文章
nowtime varchar2(20);
begin
Select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') into nowtime from dual;
insert into T_NEWS_ARTICLE
(ID,ART_CONTENT,)
values
(ID,W_ART_CONTENT);
commit;
end P_ARTICLE;
上面的用法,如果CONTENT小的情况下,没问题,如果文本量大,就提示"请求的转换失败"
如何在存储过程里面实现呢?
有人说是先存入一个空的CLOB类型,再修改该字段,可是传过来的是OracleType.Clob类型,该如何在过程里操作呢,我是想在过程里修改?
弄两天了....急!!!!
求达人!!!
你需要构造一个临时lob,clob没有用过这个类型,应该类似这样OracleConnection connection = new OracleConnection("server=MyServer; integrated security=yes;");
connection.Open();
OracleTransaction transaction = connection.BeginTransaction();
OracleCommand command = connection.CreateCommand();
command.Transaction = transaction;
command.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
command.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
command.ExecuteNonQuery();
OracleLob tempLob = (OracleLob)command.Parameters[0].Value;
byte[] tempbuff = new byte[10000];
tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
tempLob.Write(tempbuff,0,tempbuff.Length);
tempLob.EndBatch();
command.Parameters.Clear();
command.CommandText = "MyTable.MyProc";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new OracleParameter("ImportDoc", OracleType.Blob)).Value = tempLob;
command.ExecuteNonQuery();
transaction.Commit();