oracle抽取用户A的tmp表数据至用户B的tmp表

方案:
1、用navicate使用用户A的账号连接oracle,导出tmp表的结构sql脚本;
2、用navicate使用用户B的账号连接oracle,执行第一步骤tmp表的sql脚本在用户B下创建tmp表;
3、在用户B下使用grant insert on B.tmp to A,使得用户A有向用户B的tmp表插入数据的权限;
4、在用户A下执行insert into B.tmp(字段列表) select 字段列表 from A.tmp where 条件。

在实践过程中,因为用户A的tmp表用到了alter table tmp add constraint PK_ODC_ZJ primary key (ODC_ZJ) using index。当在用户B下创建tmp表时也执行了这条语句时,使用insert into select语句会报ORA-00001: unique constraint violated错误。
然后本人将用户B下的tmp表drop掉,重新建表时将alter table tmp add constraint PK_ODC_ZJ primary key (ODC_ZJ) using index语句去掉,使用insert into select语句就没报错了。最后执行alter table语句也没报错。
其中的原理也没弄清楚。

你可能感兴趣的:(oracle抽取用户A的tmp表数据至用户B的tmp表)