如何在plsql游标列上检查空条件?

时间:2018-05-08 19:08:14

标签: oracle plsql

我在查询中创建一个游标,从表中获取所有列。在一个循环中,我正在使用每一列并将其打印出来。我想知道检查列是否有任何值的简单方法。如果一行中的列为null,则输入“NULL”。我知道我可以使用if条件来检查for循环中游标的一行中的每一列。但我有很多专栏,所以有一种简单的方法吗?

1 个答案:

答案 0 :(得分:1)

您应该考虑在游标本身中执行此操作,而不是在PL / SQL中处理此要求。通常,您在SQL中可以做得越多越好(优化器将处理性能)。如果处理大量数据,使用大量的PL / SQL逻辑尤其不需要循环中的/ else条件将使您受益。

在光标中,您可以简单地:

CURSOR c1 IS
SELECT NVL(column, 'NULL')
FROM   dual;

有很多内置的SQL函数可以为您处理。上面,我使用了NVL,但您可以使用COALESCE,CASE等

CASE示例(注意 - 如果列不是数据类型VARCHAR,那么您将需要应用一些数据类型转换以避免任何错误):

CURSOR c1 IS
SELECT (CASE 
           WHEN column IS NULL THEN
             'NULL'
           ELSE
             column
        END)
FROM   dual;

COALESCE示例:

CURSOR c1 IS
SELECT COALESCE(column, 'NULL')
FROM   dual;  

值得注意的是NVL是一个二进制函数,意味着只能测试一个列/值,但COALESCE可以同时测试多个列/值,如下所示:

SELECT COALESCE(column1,column2,column3,'NULL') 从你的到来;

如果column1值为NULL且column2为NOT NULL,则返回column2值。

如果column1和column2值都为NULL,则返回column3值。

如果column1,column2,column3都为NULL,则返回值“NULL”。