出现的错误是:如果字符长度大于27k,会出现“ORA-01460: 转换请求无法实施或不合理”的错误提示。我要实现的功能是增加一条新闻内容,content字段是nclob类型。
我写了一个存储过程News_Update
有关的语句是:
p_content in  nClob,
UPDATE NewsContent SET content = p_content WHERE  newsid = p_newsid;c#代码:
OracleParameter[] parameters ={
            OracleHelper.MakeInParam("p_newsid",OracleType.Number,0,model.NewsID),
            ...
            OracleHelper.MakeInParam("p_content",OracleType.NClob,0,model.Content),
            ...
        };
OracleHelper.RunProc("News_Update", parameters);
第一次使用oracle 数据库,请教一下!谢谢!

解决方案 »

  1.   

    nclob可以存4GB*chunk(默认=数据库block大小),你才27k,应该不是长度问题是不是字符集问题?
    你用全英文的字符串尝试下呢?
      

  2.   

    网上找了很多方法,试过也都不行。我肯定是理解不正确。--插入内容
    declare p_contentclob clob;
    amount number;
    begin
    amount:=length(p_content);
    select content into p_contentclob from newscontent where newsid=p_newsid for update;
    dbms_lob.write(p_contentclob,amount,1,p_content);
    commit;
    end;这里的p_content在存储过程里是什么类型的,我用的是p_content in NVARCHAR2。看的例子是直接字符串写进来的。
      

  3.   

    所有的数据库在用clob/blob、nclob时,直接存和取只能适用很小的资料,而定义为这几种类似就是为了存储大数据,正确用法是使用GetChars/getBytes