oracle 10g pl/sql 有条件的循环选择

Posted

技术标签:

【中文标题】oracle 10g pl/sql 有条件的循环选择【英文标题】:oracle 10g pl/sql conditional for loop select 【发布时间】:2012-11-14 22:25:05 【问题描述】:

在 10g 的 PL/SQL 中可以做这样的事情吗?

if user_is_goat = 1 then
  for item_rec in (select * from pricing_for_goats)
else 
  for item_rec in (select * from pricing_for_non_goats)
end if;
loop
.
.
end loop;

似乎当 oracle 看到“for rec in select * from dual”时,它期望“循环”立即跟随。我在循环中的代码很多行,我不想维护它的 2 个副本。

【问题讨论】:

【参考方案1】:

试试下面的查询,这将检查变量user_is_goat = 1是否从for_goats返回数据,否则它将从for_non_goats返回

for item_rec in 
(
  select * from pricing_for_goats where user_is_goat = 1
  union
  select * from pricing_for_non_goats where user_is_goat <> 1
)
loop
.....
.....
end loop;

【讨论】:

我喜欢它,但只有两个表兼容才能工作 所以你不能用你需要的列列表替换*。你必须知道它们是什么,因为你在循环中使用它们,对吧?

以上是关于oracle 10g pl/sql 有条件的循环选择的主要内容,如果未能解决你的问题,请参考以下文章

oracle pl/sql 控制结构(分支,循环,控制)

使用 PL/SQL 过程在 oracle 10g 中转储表

Oracle 10g 中的可选条件

根据 Oracle 10g PL/SQL 中的内容将行转为列

PL/SQL 中 CASE 语句中的堆栈条件

PL/SQL Oracle 10g 询问用户输入(替代变量除外)