求代码
有存储过程如下:
create or replace procedure updateclob(table_name in varchar2,field_id in varchar2, field_name in varchar2,v_id in number,v_pos in number,v_clob in varchar2)
is
lobloc clob;
c_clob varchar2(32767);
amt binary_integer;
pos binary_integer;
query_str varchar2(1000);
begin
pos:=v_pos*32766+1;
amt := length(v_clob);
c_clob:=v_clob;
query_str :='select '||field_name||' from '||table_name||' where '||field_id||'= :id for update ';
EXECUTE IMMEDIATE query_str INTO lobloc USING v_id;
--from pos position, write 32766 varchar2 into lobloc
dbms_lob.write(lobloc, amt, pos, c_clob);
commit;
exception
when others then
rollback;
end updateclob;
在c#中如何做循环,为什么总是抱错,01480的错误!!!!!

解决方案 »

  1.   

    c#代码如下:有错误吗?
                try
                {
                    if (Conn.State == ConnectionState.Closed) Conn.Open();
                    int count = richTextBox1.Text.Length / 32767;
                    int mod = richTextBox1.Text.Length % 32767;
                    if (mod > 0) count++;
                    for (int i = 1; i <= count; i++)
                    {
                        string sss = "";
                        if ((mod > 0) && (i == count))
                        {
                            sss = richTextBox1.Text.Substring((i - 1) * 32767, mod);
                        }
                        else sss = richTextBox1.Text.Substring((i - 1) * 32767, 32767);
                        OracleCommand oraclecommand = new OracleCommand("updateclob", Conn);
                        oraclecommand.CommandType = CommandType.StoredProcedure;
                        oraclecommand.Parameters.Add(new OracleParameter("table_name", OracleType.VarChar, 100));
                        oraclecommand.Parameters.Add(new OracleParameter("field_id", OracleType.VarChar, 100));
                        oraclecommand.Parameters.Add(new OracleParameter("field_name", OracleType.VarChar, 100));
                        oraclecommand.Parameters.Add(new OracleParameter("v_id", OracleType.Number, 10));
                        oraclecommand.Parameters.Add(new OracleParameter("v_pos", OracleType.Number, 10));
                        oraclecommand.Parameters.Add(new OracleParameter("v_clob", OracleType.VarChar, 2000));
                        // oraclecommand.Parameters.Add(new OracleParameter("ccc", OracleType.VarChar, 4000));                    oraclecommand.Parameters["table_name"].Value = "TESTCLOB";////  表名
                        oraclecommand.Parameters["field_id"].Value = "field_id"; //// 表id
                        oraclecommand.Parameters["field_name"].Value = "field_name";////clob字段
                        oraclecommand.Parameters["v_id"].Value = 1;////第几条记录数
                        oraclecommand.Parameters["v_pos"].Value = i - 1;/////插入位置
                        oraclecommand.Parameters["v_clob"].Value = sss;/////////插入值
                        MessageBox.Show(sss.Length.ToString());
                        // oraclecommand.Parameters["ccc"].Value = "csdfasdfasdf";/////////插入值
                        oraclecommand.ExecuteScalar();
                        MessageBox.Show("SUCCESS");
                    }
                }
                catch (System.Data.OracleClient.OracleException oe)
                {
                    MessageBox.Show(oe.Message);
                }
      

  2.   

    注意:
    oraclecommand.Parameters.Add(new OracleParameter("v_clob", OracleType.VarChar, 2000)); 处是没有错误的,呵呵,写错了而已