打印

figo come in

figo come in

还是以前的问题.
帮忙看看ora01406的错误.

代码如下
master:

create snapshot log on table tablespace with rowid;

snapshot:
create database link connect to user identified by passwd using 'tns:master';

create snapshot master table tablespace refresh fast next sysdate + 1/86400 with rowid as
select varchar2(4000) from table@database link;

注* table里有一列的长度是varchar2(4000)
select varchar2(4000) from table的时候ora01406发生.

TOP

i am coming , can may do nothing.
这个是不是上次的问题念?
估计就是客户端的oracle版本的问题吧。升级到10或者11,
如果不能升级客户端,就用两个变量来存储那一个varchar2(4000)的列值。
如果也不能改程序,就不要用oracle自带的sqlplus,换个客户端工具试试,比如pl/sql dev
和objbrowser

TOP

对哈,这一个问题发三个帖子,不利于阅读了,呵呵。
信为人之本

TOP

还有就是什么变量这么大啊,用4000个字节,数据库是不是设计有问题。
难不成客户想把2000字左右的文章作为一个字段放到数据库里存者,如果是这样,杀人的心都有了。

既然是varchar2型的,看看能不能压缩成1200以下就能解决问题。
select varchar2(1200) from table@database link;

TOP

>不能升级客户端,也不能改程序.不能压缩
要求比较多,见谅.

>pl/sql dev和objbrowser
ora01406,一样的错误.

>两个变量来存储那一个varchar2(4000)的列值
怎么样用两个变量来存储那一个varchar2(4000)的列值?

TOP

用两个变量就要改程序,你不是说不能改程序么。

lz能不能先用一下
select * from table where length(大变量)  > 1200
来查一下数据里大变量的值到底有多少。

TOP

问一下.
大变量是什么?

TOP

大变量就是那个4000的列

length(列名)

TOP

大变量的值是4000KB啊

TOP

substr(大变量的列名, 0, 1200)  -----  前1200个字节的数据
substr(大变量的列名, 1200 , length(大变量的列名)-1200)  -------1200个字节以后的数据

select substr(大变量的列名, 0, 1200) , substr(大变量的列名, 1200 , length(大变量的列名)-1200) from table where length(大变量的列名) > 1200

把那个大数据分成上面两个变量,放在snapshot里,如果需要从snapshot里恢复数据的话,再把这两个变量用||合起来。
声明一下,我没这么做过,觉得这样应该可行。

[ 本帖最后由 figo 于 2008-7-23 15:51 编辑 ]

TOP