CREATE TABLE TEMP1(
EmpNo NUMBER(6) PRIMARY KEY,
Deptno NUMBER(6),
Re VARCHAR2(100)
);
insert into TEMP1 values(1,111,'备注111');
insert into TEMP1 values(2,222,'备注222');
insert into TEMP1 values(3,333,'备注333');CREATE TABLE TEMP2(
Deptno NUMBER(6),
loc VARCHAR2(10)
);
insert into TEMP2 values(111,'NEWYORK');
insert into TEMP2 values(222,'BEIJING');
insert into TEMP2 values(333,'SHANGHAI');
insert into TEMP2 values(444,'SHENGZHENG');下面的update查询temp2中字段更新temp1,但temp2中没有empno,re字段也能执行成功,
deptno值更改了,但empno和re的值没变;
并且如果select中的不存在的两个字段也不存在temp1中的话执行就会报错。
update TEMP1
set (deptno,empno,re)=(select deptno,empno,re from TEMP2 where deptno=222)
where empno=1;
哪位前辈能帮忙分析下这个update是怎么解析执行的...
EmpNo NUMBER(6) PRIMARY KEY,
Deptno NUMBER(6),
Re VARCHAR2(100)
);
insert into TEMP1 values(1,111,'备注111');
insert into TEMP1 values(2,222,'备注222');
insert into TEMP1 values(3,333,'备注333');CREATE TABLE TEMP2(
Deptno NUMBER(6),
loc VARCHAR2(10)
);
insert into TEMP2 values(111,'NEWYORK');
insert into TEMP2 values(222,'BEIJING');
insert into TEMP2 values(333,'SHANGHAI');
insert into TEMP2 values(444,'SHENGZHENG');下面的update查询temp2中字段更新temp1,但temp2中没有empno,re字段也能执行成功,
deptno值更改了,但empno和re的值没变;
并且如果select中的不存在的两个字段也不存在temp1中的话执行就会报错。
update TEMP1
set (deptno,empno,re)=(select deptno,empno,re from TEMP2 where deptno=222)
where empno=1;
哪位前辈能帮忙分析下这个update是怎么解析执行的...
解决方案 »
- 新手 问个oracle问题 资深DBA赐教啊
- oracle分组统计 rollup
- 如何在java中建立orcal数据库 并填写主键自增的trigger
- oracle 不能做DDL操作!!!!!!!!!!!!!
- oracle连接远程数据库的问题
- oracle 10g 做了RAC怎么实现负载均衡
- 达人帮忙,ORA4030的错误应该怎样调整程序或ORACLE?
- 怎样将Oracle 数据转到Sql server中?其中Oracl中大量用到了触发器和存储过程.
- oracle远程连接
- oracle8.1.7如何DML修改列的名字? 删除列?
- oracle中二进制常量的表示方式
- 求助:如何查询教师表,同时显示 教师姓名+教师的学生的个数
set (deptno,empno,re)=(select deptno,empno,re from TEMP2 where deptno=222)
where empno=1;
把你上面sql中的字段都加上表的别名,你再运行下
set (deptno,empno,re)=(select TEMP2.deptno,empno,re from TEMP2 where deptno=222)
where empno=1;
set (deptno,empno,re)=(select deptno,empno,re from TEMP2 where deptno=222)
where empno=1;
这样可以执行成功的,不过是只更新了的deptno;而empno,re没有变.
第一次碰到这样的SQL,我就算想知道这个update是怎么解析执行的...
set deptno=(select deptno from TEMP2 where deptno=222),
empno=empno,
re=re
where empno=1;也就是empno是TEMP1自己表的字段,把这个值查出来不做修改再update回去。。