存储过程里如何操作插入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类型,该如何在过程里操作呢,我是想在过程里修改? 
弄两天了....急!!!! 
求达人!!! 

解决方案 »

  1.   


    你需要构造一个临时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();
      

  2.   

    W_ART_CONTENT应该是CONTENT,我打错了