oracle 9i 中 merge into 的问题

xiaozhimin1978 2008-04-20 09:23:33
两个表结构如下:

SQL> desc employee
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

ID NUMBER(4)
NAME VARCHAR2(8)
DEP_ID NUMBER(4)
SALARY NUMBER(6)

SQL> desc employee1
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------

ID NUMBER(4)
NAME VARCHAR2(8)

执行一个 merge 语句老是报错:


1 merge into employee1 e1
2 using employee e2
3 on (e1.id = e2.id)
4 when matched then
5 update set
6 name = e1.name
7 when not matched then
8* insert (id, name) values(e2.id, e2.name)
SQL> /
insert (id, name) values(e2.id, e2.name)
*
ERROR 位于第 8 行:
ORA-00957: 列名重复

把 insert 中的字段列表去掉就执行成功

怎么回事?
...全文
388 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaozhimin1978 2008-04-21
  • 打赏
  • 举报
回复
我试过了,好象无论是否有重名的,都要求用表名或别名
19az 2008-04-21
  • 打赏
  • 举报
回复
应该是这样的语句
merge into employee1 e1
using employee e2
on (e1.id = e2.id)
when matched then
update set e1.name = e2.name
when not matched then
insert (e1.id, e1.name)
values(e2.id, e2.name)
;
19az 2008-04-21
  • 打赏
  • 举报
回复
是因为你两个表列名是一样的,导致列名重复,所以你需要在insert语句中也需要用别名。
如下:
merge into employee1 e1
using employee e2
on (e1.id = e2.id)
when matched then
update set
e1.name = e1.name
when not matched then
insert (e1.id, e1.name) values(e2.id, e2.name)
jackiecheng001 2008-04-21
  • 打赏
  • 举报
回复
语法格式不对啊
应该是WHEN NOT MATCHED THEN
INSERT
VALUES(......)

看不出doer_ljy 的改法的优势

望指点下 ^_^
doer_ljy 2008-04-21
  • 打赏
  • 举报
回复
merge into employee1 e1
2 using employee e2
改成
merge into employee1 e1
2 using (select id,name from employee) e2
fxianxian 2008-04-21
  • 打赏
  • 举报
回复
這個是MERGE的固定語法
WHEN NOT MATCHED THEN
INSERT
VALUES(......)


這個時候是不需要列名的!

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧