2011-12-30 50 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> 
相关问题