Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да използвате функцията Coalesce в Oracle

Какво е функция за сливане

Функция сливане е полезна функция в 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

  1. Сливането е обобщение на функцията NVL. Функцията NVL може да се използва за два израза, докато coalesce може да се използва за много.
  2. В случай на два израза те са еднакви, но реализацията е различна. Oracle оценява и двата израза в случай на NVL, докато просто оценява първия израз в случай на обединяване. Така че, ако вторият израз има грешки, NVL ще изведе грешка докато не се сливат.
  3. 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. автоматизиращ скрипт за връщане назад оракул

  2. как да използвате dbms_scheduler за изпълнение на заданието на всеки 30 минути

  3. Как да инсталирам Oracle Instant Client на Mac?

  4. Oracle 11g - Unpivot

  5. java.security.AccessControlException:достъпът е отказан (java.security.SecurityPermission authProvider.SunMSCAPI)