PL/SQL ...如果在select中?

1 sql database oracle plsql

在PL/SQL方面我很新,我必须修改其他人的存储过程.

是否可以在select中间添加if语句?我尝试打开一个游标并从不同的表中选择一堆东西(不要问我为什么他们没有使用连接)并返回光标.我正在尝试做的事情是,有两列具有相似的数据,可以永远不会同时填充.因此,如果一个为null,则另一个应该有一个值,并且游标需要来自任何填充的值.那么...如果声明里面的选择?

我不会发布实际的代码,因为它会使你的眼球流血,但它看起来像......

open rc for
select l.data1 as ld1, l.data2 as ld2, b.data1 as bd1, 
       b.data2 as bd2, c.data1 as as c_d1, c.data2 as cd2
from tablel l, tableb b, tablec c
where blahblahblah
and c.data1 = [b.data3 if b.data4 is null, else b.data4]?
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我似乎无法获得语法.

Ton*_*ews 8

您可以使用NVL或COALESCE:

open rc for
select l.data1 as ld1, l.data2 as ld2, b.data1 as bd1,
       b.data2 as bd2, c.data1 as as c_d1, c.data2 as cd2
from tablel l, tableb b, tablec c
where blahblahblah
and c.data1 = coalesce(b.data4,b.data3)
Run Code Online (Sandbox Code Playgroud)

  • COALESCE更受欢迎,因为它是ANSI - 它可以在Oracle,SQL Server,MySQL上运行...... (3认同)

Bra*_*don 5

使用案例陈述代替?

and c.data1 = CASE WHEN b.data3 IS NOT NULL THEN b.data3 ELSE b.data4 END
Run Code Online (Sandbox Code Playgroud)