Oracle中Drugs表补填D_price字段遇约束错误的解决咨询
解决Oracle中Drugs表D_price字段补填问题
嘿,我来帮你理清这两个报错的原因,然后给你正确的解决方法:
先说说你遇到的两个错误原因
- ORA-00001: 唯一约束冲突:你用
INSERT语句尝试添加D_id=50的记录,但这个ID对应的记录已经存在于Drugs表中了(你提到前3列数据已经填充完成)。INSERT是用来新增一条全新记录的操作,而不是修改已有记录,所以触发了主键(或唯一约束)的冲突——因为D_id应该是表的主键,不允许重复值。 - ORA-00933: SQL命令格式错误:
INSERT语句本身不支持WHERE子句,这个语法是完全错误的。你想要修改已有记录的字段值,应该用UPDATE语句,而不是INSERT。
正确的补填方法
要给已存在的D_id=50的记录补填D_price值,你需要使用UPDATE语句,具体写法如下:
UPDATE drugs SET d_price = 400 WHERE d_id = 50;
如果你的Oracle会话没有开启自动提交,执行完上面的语句后,记得执行COMMIT;来提交修改:
COMMIT;
额外小提示
如果需要批量给多个D_id的记录补填价格,可以这样写(示例):
UPDATE drugs SET d_price = CASE WHEN d_id = 50 THEN 400 WHEN d_id = 51 THEN 350 WHEN d_id = 52 THEN 280 END WHERE d_id IN (50, 51, 52);
这样可以一次性更新多条符合条件的记录,避免重复执行单条UPDATE语句。
内容的提问来源于stack exchange,提问作者Parth Mehta
相关产品推荐
相关产品推荐

