日期:2014-05-17  浏览次数:21547 次

oracle数据类型nclob
出现的错误是:如果字符长度大于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 数据库,请教一下!谢谢!
------解决方案--------------------
nclob可以存4GB*chunk(默认=数据库block大小),你才27k,应该不是长度问题

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

是不是字符集问题?
你用全英文的字符串尝试下呢?


我用全英文的也一样。我用20K多的中文测试是正常的,也是同样的字符复制过来,一旦超出就报这个错误!
------解决方案--------------------
网上找了很多方法,试过也都不行。我肯定是理解不正确。

--插入内容
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。看的例子是直接字符串写进来的。
------解决方案--------------------
所有的数据库在用clob/blob、nclob时,直接存和取只能适用很小的资料,而定义为这几种类似就是为了存储大数据,正确用法是使用GetChars/getBytes
------解决方案--------------------
引用:
所有的数据库在用clob/blob、nclob时,直接存和取只能适用很小的资料,而定义为这几种类似就是为了存储大数据,正确用法是使用GetChars/getBytes


有例子可以看下吗?
------解决方案--------------------
我解决了。。哈哈