复制A表的若干字段的数据到B表

这是将表A的三个值查询出来,然后插入表B;需要注意的是,表A的三个值和表B的三个值是一一对应的,所以表B事先存在,并且字段和表A对应;

insert into tableB(value1,value2,value3)

select value4,value5,value6

from tableA;

例如

insert into   t_booknew_monthlyAssessment (NURSE_NAMES,NURSE_IDS,WARD_IDS,DEPT_IDS)   select USER_NAME,USER_ID,DEPT_ID,WARD_ID  from T_HRM_USER_INFO

我插入的时候遇到一个问题。报错orcl01400,插入失败。

原因是我的表有主键,并且不能为空,所以插入失败。

解决方法:建立触发器自增。

触发器方式也需要创建SEQUENCE ,然后在将SEQUENCE 设置触发。
1.创建SEQ

执行以下SQL 创建表

---自增序列
CREATE SEQUENCE T_SYS_USER_SEQ
MINVALUE 1 
NOMAXVALUE 
INCREMENT BY 1 
START WITH 1 NOCACHE ;

2.设置触发器

执行下边语句


--创建触发器
create or replace trigger T_SYS_USER_USER_ID_TRIGGER
  before insert on SYS_USERS  
  for each row
begin
  select T_SYS_USER_SEQ.nextval into :new.user_id from dual;
end T_SYS_USER_USER_ID_TRIGGER;

注意一下这四条信息改成自己的就行了
T_SYS_USER_USER_ID_TRIGGER 是设置的触发器名字
SYS_USERS是表名
T_SYS_USER_SEQ 是序列名
new.user_id 是 new.主键
3.插入的SQL

忽略id 直接插入, id数据库自动添加

insert into sys_users(user_name,user_pwd,sex) 
       values('shaoduo','shao111','男') ;
       commit ;

刚才复制完之后发现还缺少一个字段的内容没复制。加个条件就好了例如

update  t_booknew_monthlyAssessment m set
  (m.powerids)=(
  select n.POWER_ID
    from T_HRM_USER_INFO n where m.nurse_ids=n.user_id and m.nurse_names=n.user_name)

猜你喜欢

转载自blog.csdn.net/qq_24521431/article/details/83508033