我的要求是,我需要从我的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