Co to jest funkcja łączenia
Funkcja łączenia jest użyteczną funkcją w oracle i jest bardzo przydatna, gdy chcemy zwrócić pierwsze niepuste wartości z listy. Ten samouczek SQL zawiera wyjaśnienia, przykłady funkcji łączenia w Oracle oraz różnice między połączeniem i NVL
wyr1 :To jest zwracane, jeśli nie ma wartości NULL
expr2:To jest zwracane, jeśli nie jest NULL, a pierwsze wyrażenie jest NULL
exprn:To jest zwracane, jeśli poprzednie wyrażenie jest NULL
Tak więc Łączenie w Oracle zwróci pierwsze wyrażenie, jeśli nie jest puste, w przeciwnym razie połączy resztę wyrażenia
Ważny punkt
(1) Baza danych Oracle wykorzystuje ocenę zwarcia. Baza danych ocenia każdą wartość wyrażeń i określa, czy jest ona NULL, zamiast oceniać wszystkie wartości wyrażeń przed określeniem, czy którakolwiek z nich jest NULL.
(2)COALESCE w Oracle jest równoważne funkcji Case
Tak więc COALESCE (wyrażenie1, wyrażenie2) jest równoważne:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Podobnie,
COALESCE (expr1, expr2, …, exprn), dla n>=3 jest równoważne:
CASE WHEN expr1 IS NOT NULL THEN expr1 WHEN expr2 IS NOT NULL THEN expr2 WHEN expr3 IS NOT NULL THEN expr3 WHEN exprn IS NOT NULL THEN exprn END
Lub można to zapisać jako
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE COALESCE (expr2, ..., exprn) END
(3) Zwykle wszystkie wyrażenia wyrażenia koalescencyjnego powinny być tego samego typu danych, w przeciwnym razie zostanie zwrócone ORA-00932.
SQL> select coalesce('a',1,2) from dual; select coalesce('a',1,2) from dual * ERROR at line 1: ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
Jeśli wszystkie wystąpienia wyrażenia mają numeryczny typ danych lub dowolny nienumeryczny typ danych, który można niejawnie przekonwertować na numeryczny typ danych, Oracle Database określa argument o najwyższym priorytecie liczbowym, niejawnie konwertuje pozostałe argumenty na ten typ danych i zwraca ten typ danych.
Jak korzystać z funkcji łączenia
SQL> select coalesce(1,2,3) from dual; COALESCE(1,2,3) --------------- 1 SQL> SELECT COALESCE(null, null, null, 'X', 'Y'); COALESCE(...) --------------- X
Przykłady łączenia
Załóżmy, że mamy tabelę wyroczni pracowników składającą się z adresu1, adres2 i adres3 i możemy chcieć wydrukować pierwszy niepusty adres pracowników z tabeli w kolejności priorytet adres1> adres2> adres3
select emp_name, COALESCE(address1,address2,address3) from employee;
Różnica między funkcją łączenia i NVL
- Coalesce to uogólnienie funkcji NVL. Funkcja NVL może być użyta dla dwóch wyrażeń, a koalescencja może być użyta dla wielu
- W przypadku dwóch wyrażeń są one takie same, ale implementacja jest inna.Oracle oblicza oba wyrażenia w przypadku NVL, podczas gdy w przypadku koalescencji po prostu ocenia pierwsze wyrażenie.Więc jeśli drugie wyrażenie zawiera błędy, NVL wygeneruje błąd podczas gdy połączenie nie będzie.
- Coalesce to standard ANSI, podczas gdy NVL jest specyficzny dla Oracle
Powiązane artykuły
Samouczek Oracle Sql
Funkcja NULLIF w Oracle
Funkcja NVL w Oracle
Funkcja Oracle LITAGG
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ funkcje023.htm#SQLRF00617