簡體   English   中英

Oracle合並而不是插入?

[英]Oracle merge instead of insert?

我目前在perl腳本中使用DBI模塊有一個insert語句,用於收集路由器接口數據。 它每次都有效,但很明顯會出現Unique約束錯誤,因為重新運行腳本時會出現一些項目。 我試圖進行合並,但我不確定如何通過不從我看到的例子中選擇另一個表中的數據來做到這一點。 為了更好地理解,perl腳本通過將ssh運行到設備並將某些信息存儲到變量中來收集數據。 例如,接口名稱將是$interface 等等

當前的插入語句

$dbh->do("INSERT INTO table VALUES (?, ?, ?, ?, ?)", undef, $interface, $id, $device, $description, $user);

我開始編寫合並功能,但我似乎無法掌握這將如何工作,因為所有合並語句都從其他表中選擇並匹配數據,然后進行更新/插入? 下面的示例從2個不同的表中選擇數據並進行匹配,但是我只查看一個表並想要合並新數據。

MERGE INTO bonuses D
   USING (SELECT employee_id, salary, department_id FROM employees
   WHERE department_id = 80) S
   ON (D.employee_id = S.employee_id)
   WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
     DELETE WHERE (S.salary > 8000)
   WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
 VALUES (S.employee_id, S.salary*.01)
 WHERE (S.salary <= 8000); 

因此,它將數據合並為bonuses但與員工進行匹配。 即使這樣的聲明有效,甚至可以在perl腳本中使用這樣的聲明嗎?

在您的情況下,像這樣的MERGE語句應該有效。 請注意,我從DUAL表中選擇一條記錄。 您可以使用DUAL多個UNION ALL進行多行操作。

MERGE INTO yourtable target
     USING (SELECT 1 AS id, 'value_1' AS column_1, 'value_2' AS column_2
              FROM DUAL) source
        ON (source.id = target.id)
WHEN MATCHED
THEN
   UPDATE SET
      target.column_1 = source.column_1, target.column_2 = source.column_2
WHEN NOT MATCHED
THEN
   INSERT     (column_1, column_2)
       VALUES (source.column_1, source.column_2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM