å¨æ°æ®ä»åºä¸ç转æ¢åè£
è½½è¿ç¨ä¸ï¼ç»å¸¸ä¼ä½¿ç¨MERGEè¯å¥ï¼è¿éç®åæ»ç»ä¸ä¸ãMERGEè¯å¥æ¯Oracle9iæ°å¢çè¯æ³ï¼ç¨æ¥å并UPDATEåINSERTè¯å¥ãéè¿MERGEè¯å¥ï¼æ ¹æ®ä¸å¼ 表æåæ¥è¯¢çè¿æ¥æ¡ä»¶å¯¹å¦å¤ä¸å¼ 表è¿è¡æ¥è¯¢ï¼è¿æ¥æ¡ä»¶å¹é
ä¸çè¿è¡UPDATEï¼æ æ³å¹é
çæ§è¡INSERTãè¿ä¸ªè¯æ³ä»
éè¦ä¸æ¬¡å
¨è¡¨æ«æå°±å®æäºå
¨é¨å·¥ä½ï¼æ§è¡æçè¦é«äºINSERTï¼UPDATEã ä¸é¢ç个å
·ä½çä¾åï¼ SQL> CREATE TABLE T AS SELECT ROWNUM ID, A.* FROM DBA_OBJECTS A;表已å建ãSQL> CREATE TABLE T1 AS 2 SELECT ROWNUM ID, OWNER, TABLE_NAME, CAST('TABLE' AS VARCHAR2(100)) OBJECT_TYPE3 FROM DBA_TABLES;表已å建ãSQL> MERGE INTO T1 USING T 2 ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME AND T.OBJECT_TYPE = T1.OBJECT_TYPE)3 WHEN MATCHED THEN UPDATE SET T1.ID = T.ID4 WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER, T.OBJECT_NAME, T.OBJECT_TYPE);6165 è¡å·²å并ãSQL> SELECT ID, OWNER, OBJECT_NAME, OBJECT_TYPE FROM T2 MINUS3 SELECT * FROM T1;æªéå®è¡MERGEè¯æ³å
¶å®å¾ç®åï¼ä¸é¢ç¨å¾®ä¿®æ¹ä¸ä¸ä¾åãSQL> DROP TABLE T;表已丢å¼ãSQL> DROP TABLE T1;表已丢å¼ãSQL> CREATE TABLE T AS SELECT ROWNUM ID, A.* FROM DBA_OBJECTS A;表已å建ãSQL> CREATE TABLE T1 AS SELECT ROWNUM ID, OWNER, TABLE_NAME FROM DBA_TABLES;表已å建ãSQL> MERGE INTO T1 USING T 2 ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME)3 WHEN MATCHED THEN UPDATE SET T1.ID = T.ID4 WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER, T.OBJECT_NAME);MERGE INTO T1 USING T*ERROR ä½äºç¬¬ 1 è¡:ORA-30926: æ æ³å¨æºè¡¨ä¸è·å¾ä¸ç»ç¨³å®çè¡è¿ä¸ªé误æ¯ä½¿ç¨MERGEæ常è§çé误ï¼é æè¿ä¸ªé误çåå æ¯ç±äºéè¿è¿æ¥æ¡ä»¶å¾å°çTçè®°å½ä¸å¯ä¸ãæç®åç解å³æ¹æ³ç±»ä¼¼ï¼SQL> MERGE INTO T1 2 USING (SELECT OWNER, OBJECT_NAME, MAX(ID) ID FROM T GROUP BY OWNER, OBJECT_NAME) T 3 ON (T.OWNER = T1.OWNER AND T.OBJECT_NAME = T1.TABLE_NAME)4 WHEN MATCHED THEN UPDATE SET T1.ID = T.ID5 WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OWNER, T.OBJECT_NAME);5775 è¡å·²å并ãæ¬ææ¥èªCSDNå客ï¼è½¬è½½è¯·æ æåºå¤ï¼
http://blog.csdn.net/levma/archive/2007/06/18/1656396.aspx