我的要求是,我需要根据某些条件从我的SOURCE
表中插入一些记录到TARGET
表[条件我从ANOTHER
表中获取通过游标运行的表]。插入TARGET
表后不久,我需要删除SOURCE
中的记录。此流程一直持续到CURSOR
变空为止。
因为我的表中有很多记录需要时间。是否有其他简单的方法来实现这一目标?
无论我上面提到的是我在存储过程中写的内容。
提前谢谢。答案 0 :(得分:2)
您可能需要编写触发器功能,如果两个表中的主键相等,则表源上的记录包含要删除的主键。
答案 1 :(得分:2)
不,你不能“在同一个查询中”
听起来,就像你可能会在服务器上进行大量往返一样。 可以进行优化。
一种方法可能是为您的插入分配一个触发器(在您的应用程序不必启动它们的情况下执行相应的“删除”)
另一种可能是写一个存储过程(在服务器端所有工作,没有任何无关的往返)。
此链接可能有所帮助:
http://www.devshed.com/c/a/Oracle/Developing-Simple-PL-SQL-Stored-Procedures-for-CRUD-Operations/
答案 2 :(得分: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>