Oracle IF中的多个Select语句

Oracle IF中的多个Select语句,oracle,select,if-statement,toad,case-statement,Oracle,Select,If Statement,Toad,Case Statement,我需要一些帮助来为报表编写prog./sql结构 Sql应该首先检查提示符,然后决定应该运行哪些“select”语句 类似于(伪代码) 以上这些似乎不起作用。请帮忙 您可以这样做: Select acc as ACCT,location as LOC where :loc = 'MN' UNION ALL Select accid as ACCT,locid as LOC where :loc = 'MA' UNION ALL Select accountid as ACCT,locat

我需要一些帮助来为报表编写prog./sql结构

Sql应该首先检查提示符,然后决定应该运行哪些“select”语句

类似于(伪代码)

以上这些似乎不起作用。请帮忙

您可以这样做:

Select acc as ACCT,location as LOC 
where :loc = 'MN' 
UNION ALL
Select accid as ACCT,locid as LOC 
where :loc = 'MA' 
UNION ALL
Select accountid as ACCT,location as LOC 
where :loc = 'PA';
您可以这样做:

Select acc as ACCT,location as LOC 
where :loc = 'MN' 
UNION ALL
Select accid as ACCT,locid as LOC 
where :loc = 'MA' 
UNION ALL
Select accountid as ACCT,location as LOC 
where :loc = 'PA';

若您可以创建自定义PL/SQL函数,那个么您可以从中返回结果集(所谓的记录表),然后只从函数中选择。请参阅。

如果可以创建自定义PL/SQL函数,则可以从中返回结果集(所谓的记录表),然后只需从函数中选择。请参阅。

那么

select acc,
       case :loc
       When 'MN' then location
       When 'MA' then locid
       When 'PA' then location
       ...
       end
from   ...
或者

select acc,
       case when :loc in ('MN','PA')
            then location
            When :loc in ('MA',...)
            then locid
            ...
       end
from   ...
这样做会更友好,因为它减少了唯一游标的数量。

那么

select acc,
       case :loc
       When 'MN' then location
       When 'MA' then locid
       When 'PA' then location
       ...
       end
from   ...
或者

select acc,
       case when :loc in ('MN','PA')
            then location
            When :loc in ('MA',...)
            then locid
            ...
       end
from   ...

这样做会更友好,因为它减少了唯一游标的数量。

谢谢Tony,但我不想为报表执行所有sql语句。。根据用户选择的:loc,我只需要执行一条“select”语句。优化器足够聪明,只在变量与值匹配的地方执行select,但我不想执行报表的所有sql语句。。根据用户选择的:loc,我只需要执行一个“select”语句。优化器足够聪明,只在变量与值匹配的地方执行select