光标数据问题

时间:2014-07-25 12:18:03

标签: sql oracle

我在编写代码时遇到了问题。请帮帮我。

我有一个光标c1它会有一些用户而另一个光标会包含一些其他用户。

c1和c2可能有一些普通用户。

我想写这样的代码

if c1.user=c2.user
then 
insert into b1 table
else 
insert c1 into b1 table 
insert c2 into b2 table
end;

我认为,如果有条件,我需要打开游标,但如果我之前打开2个游标,它是否会起作用?如果没有,请建议其他方法。

1 个答案:

答案 0 :(得分:0)

如果这些是您使用光标中的数据执行的唯一操作,则根本不需要光标。将两个光标连接在一起并使用带有WHEN子句的multi-table insert

insert all
    into b1 (<columns> values (<values>)
  when c1.user is null or c2.user is null
    into b2 (<columns> values (<values>)
select <columns>
  from <some_table> c1
  full outer join <some_other_table> c2
    on c1.user = c2.user
 where <some_conditions>

通过将两个表与FULL OUTER JOIN连接在一起,您可以从两个表中选择所有内容,请参阅A Visual Explanation of SQL Joins。您总是插入表B1,因此没有条件,但只有当用户不同时才会插入B2,因此会使用WHEN子句。如果它们不同,则其中一个或另一个将为NULL,因为它们不会满足JOIN条件。