coalesce(操作数1,操作数2[,...,操作数N])
1、返回coalesce操作数列表中第一个非null,如果多为null,则返回null
2、在coalesce表达式中必须至少有一个操作数不为null
3、nvl、nvl2先执行所有操作数再判断,coalesce先判断,只有在有必要时才执行操作数
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13 d:=coalesce(null,null);
14 dbms_output.put_line(d);
15 end;
16 /
declare
a varchar2(20):='a';
b varchar2(20):='b';
c varchar2(20):='c';
d varchar2(20);
function getN return varchar2
is
begin
dbms_output.put_line('Func:GetN');
Return 'GetN';
end;
begin
d:=coalesce(null,null);
dbms_output.put_line(d);
end;
ORA-06550: 第 13 行, 第 6 列:
PLS-00621: 在 COALESCE 表达式中必须至少有一个操作数不为 NULL
ORA-06550: 第 13 行, 第 3 列:
PL/SQL: Statement ignored
SQL>
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13 d:=coalesce(null,null,a,getN);
14 dbms_output.put_line(d);
15 end;
16 /
a
PL/SQL procedure successfully completed
SQL>
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13 d:=coalesce(null,null,getN);
14 dbms_output.put_line(d);
15 end;
16 /
Func:GetN
GetN
PL/SQL procedure successfully completed
SQL> select coalesce(null,null) from dual ;
COALESCE(NULL,NULL)
-------------------
比较coalesce、nvl、nvl2
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13
14 dbms_output.put_line(nvl(a,getn));
15 end;
16 /
Func:GetN
a
PL/SQL procedure successfully completed
SQL>
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13 select nvl2(a,a,getN1) into d from dual;
14 dbms_output.put_line(d);
15 end;
16 /
Func:GetN1
a
PL/SQL procedure successfully completed
SQL>
1、返回coalesce操作数列表中第一个非null,如果多为null,则返回null
2、在coalesce表达式中必须至少有一个操作数不为null
3、nvl、nvl2先执行所有操作数再判断,coalesce先判断,只有在有必要时才执行操作数
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13 d:=coalesce(null,null);
14 dbms_output.put_line(d);
15 end;
16 /
declare
a varchar2(20):='a';
b varchar2(20):='b';
c varchar2(20):='c';
d varchar2(20);
function getN return varchar2
is
begin
dbms_output.put_line('Func:GetN');
Return 'GetN';
end;
begin
d:=coalesce(null,null);
dbms_output.put_line(d);
end;
ORA-06550: 第 13 行, 第 6 列:
PLS-00621: 在 COALESCE 表达式中必须至少有一个操作数不为 NULL
ORA-06550: 第 13 行, 第 3 列:
PL/SQL: Statement ignored
SQL>
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13 d:=coalesce(null,null,a,getN);
14 dbms_output.put_line(d);
15 end;
16 /
a
PL/SQL procedure successfully completed
SQL>
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13 d:=coalesce(null,null,getN);
14 dbms_output.put_line(d);
15 end;
16 /
Func:GetN
GetN
PL/SQL procedure successfully completed
SQL> select coalesce(null,null) from dual ;
COALESCE(NULL,NULL)
-------------------
比较coalesce、nvl、nvl2
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13
14 dbms_output.put_line(nvl(a,getn));
15 end;
16 /
Func:GetN
a
PL/SQL procedure successfully completed
SQL>
SQL> declare
2 a varchar2(20):='a';
3 b varchar2(20):='b';
4 c varchar2(20):='c';
5 d varchar2(20);
6 function getN return varchar2
7 is
8 begin
9 dbms_output.put_line('Func:GetN');
10 Return 'GetN';
11 end;
12 begin
13 select nvl2(a,a,getN1) into d from dual;
14 dbms_output.put_line(d);
15 end;
16 /
Func:GetN1
a
PL/SQL procedure successfully completed
SQL>
本文详细介绍了SQL中的coalesce、nvl和nvl2函数,通过示例展示了它们在处理NULL值时的不同行为。coalesce函数返回第一个非NULL的操作数,如果没有非NULL值则返回NULL;而nvl和nvl2在所有操作数都被计算后再决定是否返回NULL。此外,文章还通过示例解释了在何时会执行函数调用,以及它们在实际使用中的应用场景。
6482

被折叠的 条评论
为什么被折叠?



