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