Какво е функция за сливане
Функция сливане е полезна функция в oracle и е много полезна, когато искаме да върнем първите ненулеви стойности в списъка. Този урок за SQL предоставя обяснения, примери за функцията Coalesce в Oracle и разликата между Coalesce &NVL
израз1 :Това се връща, ако не е null
expr2:Това се връща, ако не е null и първият израз е null
exprn:Това се връща, ако предходният израз е null
Така че Coalesce в oracle ще върне първия израз, ако не е null, иначе ще направи обединяването на останалата част от израза
Важен момент
(1) Oracle Database използва оценка на късо съединение. Базата данни оценява всяка стойност на expr и определя дали е NULL, вместо да оценява всички стойности на expr, преди да определи дали някоя от тях е NULL.
(2) COALESCE в oracle е еквивалентно на функцията Case
Така че COALESCE (expr1, expr2) е еквивалентно на:
СЛУЧАЙ, КОГАТО expr1 НЕ Е NULL ТОГАВА expr1ELSE expr2 END
По същия начин,
COALESCE (expr1, expr2, …, exprn), за n>=3 е еквивалентно на:
СЛУЧАЙ, КОГАТО expr1 НЕ Е NULL ТОГАВА expr1 КОГАТО expr2 НЕ Е NULL ТОГАВА expr2 КОГАТО expr3 НЕ Е NULL ТОГАВА expr3 КОГАТО exprn НЕ Е NULL ТОГАВА exprnEND
Или това може да бъде написано като
СЛУЧАЙ, КОГАТО expr1 НЕ Е NULL ТОГАВА expr1ELSE КОАЛЕСИРАНЕ (expr2, ..., exprn) КРАЙ
(3) Обикновено всички изрази на израза за обединяване трябва да са от един и същ тип данни, в противен случай ще бъде върнат ORA-00932.
SQL> изберете coalesce('a',1,2) от dual;изберете coalesce('a',1,2) от dual*ERROR на ред 1:ORA-00932:непоследователни типове данни:очакван CHAR получи NUMBERпредварително>Ако всички срещания на израз са числов тип данни или всеки нечислов тип данни, който може да бъде имплицитно преобразуван в числов тип данни, тогава Oracle Database определя аргумента с най-висок числов приоритет, имплицитно преобразува останалите аргументи към този тип данни и връща този тип данни.
Как да използвате функцията Coalesce
SQL> изберете coalesce(1,2,3) от dual;COALESCE(1,2,3)--------------1SQL> SELECT COALESCE(null, null, null , 'X', 'Y');КОАЛЕСЦИЯ(...)--------------XПримери за сливане
Да предположим, че имаме таблица оракул на служителите, състояща се от адрес1, адрес2 и адрес3 и можем да искаме да отпечатаме първия ненулев адрес на служителите от таблицата в ред на приоритет адрес1> адрес2> адрес3
изберете emp_name, COALESCE(адрес1,адрес2,адрес3) от служител;Разлика между функцията Coalesce и NVL
- Сливането е обобщение на функцията NVL. Функцията NVL може да се използва за два израза, докато coalesce може да се използва за много.
- В случай на два израза те са еднакви, но реализацията е различна. Oracle оценява и двата израза в случай на NVL, докато просто оценява първия израз в случай на обединяване. Така че, ако вторият израз има грешки, NVL ще изведе грешка докато не се сливат.
- Coalesce е ANSI стандарт, докато NVL е специфичен за Oracle
Сродни статии
Урок за Oracle Sql
функция NULLIF в Oracle
NVL функция в Oracle
Функция Oracle LISTAGG
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ functions023.htm#SQLRF00617