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

本文详细介绍了在SQL操作中遇到的ORCL01400插入失败错误及其解决方法。通过创建SEQUENCE和触发器实现自增主键,解决了因主键约束导致的数据插入问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值