sql - PL/SQL...如果在一个选择中?

标签 sql database oracle plsql

我对 PL/SQL 很陌生,我必须修改别人的存储过程。

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

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

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]?

如果可能的话,我似乎无法理解语法。

最佳答案

您可以为此使用 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)

关于sql - PL/SQL...如果在一个选择中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1805908/

相关文章:

sql - 为什么 TOP 或 SET ROWCOUNT 使我的查询如此缓慢?

c# - 需要帮助提高 SQL DELETE 性能

c# 多对多关系代码首先没有流畅的 API

database - 级联删除如何在 coredata 工作的多对多关系中工作?

java - 从 java 使用 sqlldr

使用 Windows 身份验证的 Oracle 连接字符串

java - 无法通过 JDBC 禁用 Oracle 外键

mysql - 获取每组分组 SQL 结果的最大值记录

sql - 如何使用 SqlFileStream 对 SQL Server 2012 FileTable 进行事务访问?

database - WinRT SQLite 加密