代码是:
Merge into dept_2 d
using dept de
on(d.id=de.id)
when matched then
update set
d.id=de.id,
d.name=de.namedept_2,和dept 结构只有 id name每次执行的时候都是 提示 : ORA-38104: 无法更新 ON 子句中引用的列: "D"."ID"
Merge into dept_2 d
using dept de
on(d.id=de.id)
when matched then
update set
d.id=de.id,
d.name=de.namedept_2,和dept 结构只有 id name每次执行的时候都是 提示 : ORA-38104: 无法更新 ON 子句中引用的列: "D"."ID"
解决方案 »
- oracle下怎么求同一字段值对应的另一字段的集合?
- 哪位大虾有实现交叉表的sql代码
- Oracle中如何處理帶中劃線的字段?
- 有存储过程经验请进~~可以迭代否?
- 难道在oracle数据库中TO_CHAR函数不能把12位nvarchar2类型变成14位的nvarchar2?
- 层与层之间的分组排序,比较困难,检验下能力
- 紧急求救!我在网上下载了一个plsqldev.exe文件,安装之后。。。。。。
- 我的这个实例还能恢复吗?
- 如何把一个字段的数据移到另一个字段???
- 我是新手,想学oracle databases如何入门
- ebs r11i二次開發:光標如何從一個Data Blocks跳轉到另一個Data Blocks
- 数据量达到10亿以上的时候,BI如何处理?
Merge into dept_2 d
using dept de
on(d.id=de.id)
when matched then
update set
--d.id=de.id, --去掉这个,oracle的限制不允许更新此列。再说,按照你的条件看这两个是相等的,没有更新的必要也。
d.name=de.name
-- 对头,连接条件是 d.id=de.id , 怎么还想着去更新呢?不是脑子进水了么?
dept_2 表是空的 没有任何数据 ,我想把dept中的数据全部拷贝到dept_2 中, (没用过Merge练习一下)他们的表结构 和 字段名都是一样的
using dept de
on(d.id=de.id) --这个地方报: ORA-38104: 无法更新 ON 子句中引用的列: "D"."ID"
when matched then
update set
--d.id=de.id,
d.name=de.name
using dept de
on(d.id=de.id)
when matched then
update set
d.name=de.name
when not matched then
insert (id,name)
values (de.id,de.name);
on(d.id=de.id)
when matched then
update set
d.name=de.name
when not matched then
insert (id,name)
values (de.id,de.name);-- 解释
-- *1). Merge into dept_2 d using dept de
-- 从源表 dept (别名 de) 往 dept_2 表(别名d)中插入或更新数据-- *2). on(d.id=de.id) :源表(dept)与目标表(dept_2)的连接条件是 (dept_2.id=dept.id)-- *3). when matched then update set d.name=de.name
-- 当目标表找到与源表匹配的记录行(匹配条件:dept_2.id=dept.id ),
-- 则更新目标表(dept_2) 的 name字段值为 源表 (dept) 的name字段值-- *4). when not matched then insert (id,name) values (de.id,de.name)
-- 如果没有找到匹配记录(即:源表记录的id字段值,在目标表中不存在),
-- 则将源表中这样的记录插入目标表-- 简单理解为一句话:有:则更新;无:则插入!
-- 你都知道可以省略了,怎么就写不出来呢?
-- 我是根据你这句话的意思写的撒:我想把dept中的数据全部拷贝到dept_2 中
2 (
3 id varchar2(4),
4 colA varchar2(20),
5 colB varchar2(20),
6 colC varchar2(20)
7 )
8 ;表已创建。scott@TBWORA> alter table TB1
2 add constraint PK_TB1_ID primary key (ID);表已更改。scott@TBWORA> create table TB2
2 (
3 id varchar2(4),
4 colA varchar2(20),
5 colB varchar2(20),
6 colC varchar2(20)
7 )
8 ;表已创建。scott@TBWORA> alter table TB2
2 add constraint PK_TB2_ID primary key (ID);表已更改。scott@TBWORA> insert into tb1 values('1001', 'A1', 'B1', 'C1');已创建 1 行。scott@TBWORA> insert into tb1 values('1002', 'A2', 'B2', 'C2');已创建 1 行。scott@TBWORA> insert into tb1 values('1003', 'A3', 'B3', 'C3');已创建 1 行。scott@TBWORA>
scott@TBWORA> insert into tb2 values('2001', 'A2', 'B2', 'C2');已创建 1 行。scott@TBWORA> insert into tb2 values('1003', 'A3', 'B3', 'C3');已创建 1 行。scott@TBWORA> commit;提交完成。scott@TBWORA> MERGE INTO TB2 USING TB1 ON (TB1.ID = TB2.ID)
2 WHEN MATCHED THEN UPDATE SET TB2.ID = TB1.ID
3 WHEN NOT MATCHED THEN INSERT VALUES (TB1.ID, TB1.colA, TB1.colB, TB1.colC);
MERGE INTO TB2 USING TB1 ON (TB1.ID = TB2.ID)
*
第 1 行出现错误:
ORA-38104: 无法更新 ON 子句中引用的列: "TB2"."ID"
scott@TBWORA> MERGE INTO TB2 USING TB1 ON (TB1.ID = TB2.ID)
2 WHEN MATCHED THEN UPDATE SET TB2.COLA = TB1.COLA, TB2.COLB=TB1.COLB, TB2.COLC=TB1.COLC
3 WHEN NOT MATCHED THEN INSERT VALUES (TB1.ID, TB1.colA, TB1.colB, TB1.colC);3 行已合并。
-- 请看上面的错误,再看1楼、2楼的回复! 猪!
ORA-38104 不就是你遇到的一样的错误么?