我的要求是,我需要從我的SOURCE
表中插入一些記錄到TARGET
表,根據一些條件[我從表中讀取的條件通過遊標]。插入TARGET
表後不久,我需要從我的SOURCE
刪除記錄。該流程繼續,直到CURSOR
變空。是否可以在Oracle10g的同一查詢中進行插入和刪除?
由於我在我的表中有很多記錄它的拍攝時間。是否有任何其他簡單的方法來實現這一目標?
無論我上面提到的是,我寫了一個存儲過程。
Thx提前。
我的要求是,我需要從我的SOURCE
表中插入一些記錄到TARGET
表,根據一些條件[我從表中讀取的條件通過遊標]。插入TARGET
表後不久,我需要從我的SOURCE
刪除記錄。該流程繼續,直到CURSOR
變空。是否可以在Oracle10g的同一查詢中進行插入和刪除?
由於我在我的表中有很多記錄它的拍攝時間。是否有任何其他簡單的方法來實現這一目標?
無論我上面提到的是,我寫了一個存儲過程。
Thx提前。
你可能需要寫一個觸發功能,其中,如果兩個表中的主鍵相等,則記錄上包含主鍵要刪除的表源。
不,你不能「在同一個查詢」
這聽起來,不過,就像你可能會犯很多往返和從服務器。這可能被優化。
一種方法可能是觸發分配給您的插入(做了相應的「刪除的」,而無需啓動這些應用程序)
另一種可能是寫一個存儲過程(即不所有在服務器端可能的工作,沒有任何多餘的往返)。
此鏈接可能幫助:
http://www.devshed.com/c/a/Oracle/Developing-Simple-PL-SQL-Stored-Procedures-for-CRUD-Operations/
thx爲響應... – 2011-12-30 07:26:19
的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>
thx爲響應... – 2011-12-30 07:26:55