oracle之merge語法(轉載)
MERGE 語句是Oracle9i新增的語法,用來合併UPDATE和INSERT語句。通過MERGE語句,根據一張表或子查詢的連線條件對另外一張表進行查詢, 連線條件匹配上的進行UPDATE,無法匹配的執行INSERT。這個語法僅需要一次全表掃描就完成了全部工作,執行效率要高於INSERT+ UPDATE。
SQL> CREATE TABLE MM (ID NUMBER, NAME VARCHAR2(20));
表已建立。
SQL> CREATE TABLE MN (ID NUMBER, NAME VARCHAR2(20));
表已建立。
SQL> INSERT INTO MM VALUES (1, 'A');
已建立 1 行。
SQL> INSERT INTO MN VALUES (1, 'B');
已建立 1 行。
SQL> MERGE INTO MN A
2 USING MM B
3 ON(A.ID=B.ID)
4 WHEN MATCHED THEN
5 UPDATE SET A.ID = B.ID
6 WHEN NOT MATCHED THEN
7 INSERT VALUES(B.ID, B.NAME);
ON(A.ID=B.ID)
*
ERROR 位於第 3 行:
ORA-00904: "A"."ID": 無效的識別符號
SQL> MERGE INTO MN A
2 USING MM B
3 ON(A.ID=B.ID)
4 WHEN MATCHED THEN
5 UPDATE SET A.NAME = B.NAME
6 WHEN NOT MATCHED THEN
7 INSERT VALUES(B.ID, B.NAME);
1 行已合併。
根據測試結果,發現Oracle不允許更新用於連線的列,但是錯誤提示卻有誤導的嫌疑。
而且Oracle的SQL REFERENCE手冊上也沒有給出這個提示。
雖然文件上有這樣的描述:
MERGE is a deterministic statement. That is, you cannot update the same row of the target table multiple times in the same MERGE statement.
但是這應該是說明下面這種情況的。
當有多對一的情況出現時會出現如下錯誤
SQL> INSERT INTO MM VALUES (1, 'C');
已建立 1 行。
SQL> MERGE INTO MN A2 USING MM B
3 ON(A.ID=B.ID)
4 WHEN MATCHED THEN
5 UPDATE SET A.NAME = B.NAME
6 WHEN NOT MATCHED THEN
7 INSERT VALUES(B.ID, B.NAME);
MERGE INTO MN A
*
ERROR 位於第 1 行:
ORA-30926: 無法在源表中獲得一組穩定的行
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10742223/viewspace-217955/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Merge語法Oracle
- Oracle merge into delete語法Oracledelete
- 【轉載】oracle更新語法Oracle
- Oracle 語法之 OVER (PARTITION BY ..) 及開窗函式 轉載Oracle函式
- Merge語法限制
- mysql實現merge功能之DUPLICATE key UPDATE語法MySql
- mysql實現merge into語法MySql
- SQL 高階語法 MERGE INTOSQL
- ORACLE的基本語法(轉)Oracle
- oracle中merge 語句使用Oracle
- (轉)Oracle語法之OVER(PARTITION BY)及開窗函式Oracle函式
- MERGE語句語法檢查不嚴格
- Sapi 新增語法的文章(轉載)API
- SQL Server 2008 MERGE語法SQLServer
- MogDB/openGauss中merge的語法解析
- oracle-merge用法詳解 (轉)Oracle
- C語言連線Oracle (轉載)C語言Oracle
- Oracle SQL Loader的詳細語法 <轉>OracleSQL
- oracle sequence語法Oracle
- Oracle With 語法 示例Oracle
- oracle partition by 語法Oracle
- ORACLE常用的SQL語法和資料物件(轉)OracleSQL物件
- 排序法(轉載)排序
- oracle merge into用法Oracle
- oracle_mergeOracle
- Dart語法篇之基礎語法(一)Dart
- 轉:oracle 9i/10g merge 用法Oracle
- XML入門精解之結構與語法 (轉)XML
- XML入門精解之結構與語法(轉)XML
- 最完整的editplus 之php語法檔案(轉)PHP
- MarkDown語法教程(轉)
- [轉載]SVN系列之—-SVN版本回滾的辦法
- 工作教練法(轉載)
- 工作要素法(轉載)
- 實踐法(轉載)
- 定位法則(轉載)
- Oracle sql with 語句語法與例子OracleSQL
- oracle hint no_mergeOracle