我在oracle中有一個表,其中的數據從某個第三方插入。我想從該表填充主表。那麼,什麼是使用集合的最佳性能表現方式。Oracle中的條件插入或更新
E.g.假設數據將從第三方填充到的表是'EMP_TMP'。
現在我想通過將從EMP_TMP表填充的過程填充'EMPLOYEE'主表。
這裏又有一個條件,如IF SAME EMPID(這不是主鍵)EXISTS那麼我們必須更新FULL TABLE,它包含相同的EMPID ELSE我們有INSERT NEW RECORD。
[注:這裏EMPID是VARCHAR2和EMPNO將是主鍵,我們將使用SEQUENCE]
我覺得這裏合併將不會執行好得多performancewise,因爲我們不能在MERGE語句中使用集合。
你需要解釋爲什麼合併是行不通的好一點。它專爲這種upsert風格的場景設計。另一種方法是回到舊學校預先合併,這是2條語句,更新的內部連接和插入的左側反連接。 – Andrew 2012-01-17 16:13:32
我知道合併會起作用。如果它的性能比BULK COLLECT更好,對我來說可以。這裏的數據也將以十萬盧比爲單位。 – user1017936 2012-01-17 16:16:02
@ user1017936 - 與編寫模擬相同操作的循環代碼相比,單個SQL語句(無論是「INSERT」,「UPDATE」,「DELETE」還是「MERGE」)效率更高。使用'BULK COLLECT'可以使循環代碼更高效,但不會比SQL更高效。 – 2012-01-17 16:24:31