这是将表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)