免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3231 | 回复: 13
打印 上一主题 下一主题

请问如何在表结构一样的两个表之间复制数据 [复制链接]

hu4100 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-12 17:48 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
2 [报告]
发表于 2006-10-12 18:57 |只看该作者
原帖由 hu4100 于 2006-10-12 17:48 发表
CREATE TABLE  TableA(
  FIELD001  VARCHAR2 (200)  NOT NULL,
  FIELD002  VARCHAR2 (200)  NOT NULL,
  FIELD003  VARCHAR2 (200),
  FIELD004  VARCHAR2 (200),
  FIELD005  VARCHAR2 (200),
  F ...

Insert  into  TableB  (values) select * from  TableA  where field001=’’

应该是这样的;

论坛徽章:
0
3 [报告]
发表于 2006-10-12 19:33 |只看该作者
create table tableB as
select * from tableA where ............;

论坛徽章:
0
4 [报告]
发表于 2006-10-12 20:25 |只看该作者
Insert  into  TableB  select * from  TableA  where field001=’’
hu4100 该用户已被删除
5 [报告]
发表于 2006-10-13 09:03 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2006-10-13 12:29 |只看该作者
原帖由 hu4100 于 2006-10-13 09:03 发表
我测试了一下  “  Insert  into  TableB  select * from  TableA  where field001= ” 是正确的。


而 “ Insert  into  TableB  (values) select * from  TableA  where field001=’’  ” 没有执行成功

...


SQL> select * from lhbtest
  2  ;

NAME_ID
--------------------
a
b
c

SQL> select * from lhbtestbak;

未选定行

SQL> insert into lhbtestbak (name_id) select name_id from lhbtest where name_id='a';

已创建 1 行。

SQL> select name_id from lhbtestbak
  2  ;

NAME_ID
--------------------
a

/*=======================================*/
偶验证是没有问题的.....^0^
hu4100 该用户已被删除
7 [报告]
发表于 2006-10-13 12:51 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2006-10-13 13:13 |只看该作者
原帖由 hu4100 于 2006-10-13 12:51 发表
本人菜鸟,编写的触发器如下:
CREATE OR REPLACE TRIGGER TR_DELETE_tableA
   AFTER DELETE
   ON  tableA
   REFERENCING NEW AS NEW OLD AS OLD
   FOR EACH ROW
DECLARE
   tmpvarFIELD1       VARC ...



Insert  into  tableB  select * from  GSGSJIN_BASIS02  where field001= :tmpvarFIELD1 ;

改成

Insert  into  tableB  select * from  GSGSJIN_BASIS02  where field001= tmpvarFIELD1;
hu4100 该用户已被删除
9 [报告]
发表于 2006-10-13 13:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2006-10-13 13:57 |只看该作者
原帖由 hu4100 于 2006-10-13 13:29 发表

Insert  into  tableB  select *  from  tableA  where field001= tmpvarFIELD1;   ”
去掉冒号后执行删除操作时提示

The following error has occurred:

ORA-04091: 表 tableA  发生了变化,触发器/函 ...


因为你在row trigger中引用了自身的tableA。

最简单的解决办法
Insert  into  tableB(col1,
                               col2,
                               ....)
                    values( :OLD.field001,
                                 :OLD.field002,
                               ...);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP