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>