ºÜ¶àÊìϤSQL serverµÄÅóÓÑÔÚ½Ó´¥µ½oracleµÄʱºò¾³£·¸µÄÒ»¸ö´íÎó¾ÍÊÇ×ÜÒÔΪoracleÖÐÒ²»áÓÐupdate fromÕâÖֽṹ¡£ÇëÄãËÀÁËÕâÌõÐÄ°É£¬ÔÚoracleÖеÄupdateÓï¾äÖв»´æÔÚfromÓï¾ä¡£
Ç°ÃæÎÒÃǼòµ¥½éÉܹýOracleµÄupdateÓï¾ä¡£ÕâÀïÎÒÃÇÖصã½éÉÜÈç¹û»ùÓÚ±ðµÄ±íÀ´¸üе±Ç°±íµÄupdateÓï·¨¡£
ÎÒÃÇÖªµÀÔÚoracleÖеÄÀý×ÓÊý¾Ý¿âÖÐÓÐÃûΪscottµÄschema,ÀïÃæÓÐÒ»¸ö±íÊÇemp£¬ÎÒÃǾÍÄÃÕâÀï±íÀ´¾ÙÀý
ÏȽ¨Á¢Ò»¸ö½á¹¹Ò»Ä£Ò»ÑùµÄ±íemp1£¬²¢ÎªÆä²åÈ벿·ÖÊý¾Ý
create table emp1
as
select * from emp where deptno = 20;
updateµôemp1ÖеIJ¿·ÖÊý¾Ý
update emp1
set sal = sal + 100,
comm = nvl(comm,0) + 50
È»ºóÎÒÃÇÊÔ×ÅʹÓÃemp1ÖÐÊý¾ÝÀ´¸üÐÂempÖÐsal ºÍ commÕâÁ½ÁÐÊý¾Ý¡£
ÎÒÃÇ¿ÉÒÔÕâôд
Update emp
Set(sal,comm) = (select sal,comm. From emp1 where emp.empno = emp1.empno)
Where exists (select 1 from emp1 where emp1.empno = emp.empno)
ÇëÄãÓÈÆä×¢ÒâÕâÀïµÄwhere×Ӿ䣬Äã¿ÉÒÔ³¢ÊÔ²»Ð´where×Ó¾äÀ´Ö´ÐÐÒÔÏÂÕâ¾ä»°£¬Ä㽫»áʹµÃempÖеĺܶàÖµ±ä³É¿Õ¡£
ÕâÊÇÒòΪÔÚoracleµÄupdateÓï¾äÖÐÈç¹û²»Ð´where×Ó¾ä,oracle½«»áĬÈϵİÑËùÓеÄֵȫ²¿¸üУ¬¼´Ê¹ÄãÕâÀïʹÓÃÁË×Ó²éѯ²¢ÇÒijÔÚÖµ²¢²»ÄÜÔÚ×Ó²éѯÀïÕÒµ½£¬Äã¾Í»áÏ뵱ȻµÄÒÔΪ,oracle»òÐí½«»áÌø¹ýÕâЩֵ°É£¬Äã´íÁË£¬oracle½«»á°Ñ¸ÃÐеÄÖµ¸üÐÂΪ¿Õ¡£
ÎÒÃÇ»¹»¹¿ÉÒÔÕâôд£º
update (select a.sal asal,b.sal bsal,a.comm acomm,b.comm bcomm from emp a,emp1 b where a.empno = b.empno)
set asal = bsal,
acomm = bcomm;
ÕâÀïµÄ±íÊÇÒ»¸öÀàÊÓͼ¡£
µ±È»ÄãÖ´ÐÐʱ¿ÉÄÜ»áÓöµ½ÈçÏ´íÎó:
ERROR λÓÚµÚ 2 ÐÐ:
ORA-01779: ÎÞ·¨ÐÞ¸ÄÓë·Ç¼üÖµ±£´æ±í¶ÔÓ¦µÄÁÐ
ÕâÊÇÒòΪн¨µÄ±íemp1»¹Ã»ÓÐÖ÷¼üµÄÔµ¹Ê
ÏÂÃæÔö¼ÓÒ»¸öÖ÷¼ü
alter table emp1
add constraint pk_emp1 primary key (empno);
Ö´ÐÐÖ®ºó
ÔÚÖ´ÐÐÇ°ÃæµÄÓï¾ä¾ÍÄܳɹ¦¡£
ÕâÀïÎÒÃÇ×ܽáһϣº
ÔÚoracleÖв»´æÔÚupdate from½á¹¹£¬ËùÒÔÓöµ½ÐèÒª´ÓÁíÍâÒ»¸ö±íÀ´¸üб¾±íµÄÖµµÄÎÊÌâµÄʱºò£¬ÓÐÁ½ÖÖ½â¾öµÄ°ì·¨:
Ò»ÖÖÊÇʹÓÃ×Ó²éѯ£¬Ê¹ÓÃ×Ó²éѯʱһ¶¨Òª×¢ÒâwhereÌõ¼þ(Ò»°ãºóÃæ½Óexists×Ó¾ä)£¬³ý·ÇÁ½¸ö±íÊÇÒ»Ò»¶ÔÓ¦µÄ£¬·ñÔòwhereÌõ¼þ±Ø²»¿ÉÉÙ£¬ÒÅ©µôwhereÌõ¼þʱ¿ÉÄܻᵼÖ²åÈë´óÁ¿¿ÕÖµ¡£
ÁíÍâÒ»ÖÖÊÇÀàÊÓͼµÄ¸üз½·¨£¬ÕâÒ²ÊÇoracleËù¶ÀÓеġ£ÏȰѶÔÓ¦µÄÊý¾ÝÈ«²¿³éÈ¡³öÀ´£¬È»ºó¸üбíÒ»Ñù¸üÐÂÊý¾Ý£¬ÕâÀïÐèҪעÒâµÄÊÇ£¬±ØÐë±£Ö¤±íµÄÊý¾ÝΨһÐÍ¡£