The conventional handling of null
in SQL, and the language specification, is that if any part of an expression is null
, the whole expression is null
.
However in Oracle, text concatenation converts null
to a <blank>
, eg:
select concat(concat('foo', null), 'bar') from dual; --> returns "foobar"
select 'foo' || null || 'bar' from dual; --> returns "foobar"
I want the conventional behaviour, where the result would be null
if any term is null.
Is there a method or function provided by Oracle that concatenates text using a single expression, without recoding any term, such that if any term is null
, the result is null
?
Notes:
- I don't want to repeat any terms, which would be required by a
case
etc, because the terms are very long and complex, and besides it's bad practice to repeat code - I can’t define any functions. I must use just a single SQL query using nothing but standard syntax and plain Oracle provided functions/operators
- Side-stepping the no-repeat requirement by using a subquery or a CTE isn’t answering the question, it’s avoiding it: I want to know if Oracle can concatenate Strings using a single expression in the same way every other database I know does