2011-12-30 52 views
0

我的要求是,我需要從我的SOURCE表中插入一些記錄到TARGET表,根據一些條件[我從​​表中讀取的條件通過遊標]。插入TARGET表後不久,我需要從我的SOURCE刪除記錄。該流程繼續,直到CURSOR變空。是否可以在Oracle10g的同一查詢中進行插入和刪除?

由於我在我的表中有很多記錄它的拍攝時間。是否有任何其他簡單的方法來實現這一目標?

無論我上面提到的是,我寫了一個存儲過程。

Thx提前。

回答

2

你可能需要寫一個觸發功能,其中,如果兩個表中的主鍵相等,則記錄上包含主鍵要刪除的表

+1

thx爲響應... – 2011-12-30 07:26:55

2
  1. 不,你不能「在同一個查詢」

  2. 這聽起來,不過,就像你可能會犯很多往返和從服務器。這可能被優化。

  3. 一種方法可能是觸發分配給您的插入(做了相應的「刪除的」,而無需啓動這些應用程序)

  4. 另一種可能是寫一個存儲過程(即不所有在服務器端可能的工作,沒有任何多餘的往返)。

此鏈接可能幫助:

http://www.devshed.com/c/a/Oracle/Developing-Simple-PL-SQL-Stored-Procedures-for-CRUD-Operations/

+0

thx爲響應... – 2011-12-30 07:26:19

1

merge語句可以最終刪除一些匹配的記錄。

在以下示例中,您可以注意到合併後包含四條記錄的表可能會受到插入,更新和一次全部刪除的影響。

SQL> create table xxx as 
    2 select rownum as rn, 'xxx' as pla 
    3 from dual 
    4 connect by rownum < 5 
    5/

Table created 
SQL> select * 
    2 from xxx 
    3/

     RN PLA 
---------- --- 
     1 xxx 
     2 xxx 
     3 xxx 
     4 xxx 
SQL> merge into xxx tgt using (
    2   select rownum as rn,mod(rownum,2) as even_odd 
    3   from dual 
    4   connect by rownum < 6 
    5 ) src on (tgt.rn = src.rn) 
    6 when matched then update set tgt.pla = null 
    7  delete where even_odd = 1 
    8 when not matched then insert(rn,pla) values (src.rn,'XXX') 
    9/

5 rows merged 
SQL> select * 
    2 from xxx 
    3/

     RN PLA 
---------- --- 
     2 
     4 
     5 XXX 

SQL> 
相關問題