Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Funkcja LOG() w Oracle

W Oracle LOG() funkcja zwraca logarytm o podstawie n2 , z n1 , gdzie n2 jest pierwszym argumentem i n1 jest drugi.

Składnia

Składnia wygląda tak:

LOG(n2, n1)

Gdzie n2 może być dowolną wartością dodatnią inną niż 0 lub 1 i n1 jest dowolną wartością dodatnią.

Przykład

Oto przykład:

SELECT LOG(16, 73)
FROM DUAL;

Wynik:

                                 LOG(16,73) 
___________________________________________ 
   1.54745613972000430746600429203996036707

Wartości ujemne

Wartości ujemne skutkują błędem „poza zakresem”:

SELECT LOG(-16, 73)
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LOG(-16, 73)
FROM DUAL
Error report -
ORA-01428: argument '-16' is out of range

To samo dla drugiego argumentu:

SELECT LOG(16, -73)
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LOG(16, -73)
FROM DUAL
Error report -
ORA-01428: argument '-73' is out of range

Zero

Przekazywanie 0 powoduje również błąd „poza zakresem”:

SELECT LOG(0, 73)
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LOG(0, 73)
FROM DUAL
Error report -
ORA-01428: argument '0' is out of range

I znowu, to samo dotyczy drugiego argumentu:

SELECT LOG(16, 0)
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LOG(16, 0)
FROM DUAL
Error report -
ORA-01428: argument '0' is out of range

Przekazanie 1

Przekazywanie 1 dla drugiego argumentu daje wynik 0 :

SELECT LOG(16, 1)
FROM DUAL;

Wynik:

   LOG(16,1) 
____________ 
           0

Przekazywanie 1 dla pierwszego argumentu pojawia się błąd „poza zakresem”:

SELECT LOG(1, 2)
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LOG(1, 2)
FROM DUAL
Error report -
ORA-01428: argument '1' is out of range

Wyrażenia

Argumenty mogą zawierać wyrażenia takie jak:

SELECT LOG(10 + 6, 12 * 30)
FROM DUAL;

Wynik:

                            LOG(10+6,12*30) 
___________________________________________ 
   2.12296327408241867769444932934625579835 

Argumenty nieliczbowe

Argumentami może być dowolny numeryczny typ danych lub dowolny nienumeryczny typ danych, który można niejawnie przekonwertować na numeryczny typ danych.

Oto przykład tego, co się dzieje, gdy argumenty nie spełniają tych kryteriów:

SELECT LOG('Homer', 'Symptom')
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LOG('Homer', 'Symptom')
FROM DUAL
Error report -
ORA-01722: invalid number

Argumenty zerowe

LOG() zwraca null jeśli jakikolwiek argument jest null :

SET NULL 'null';

SELECT 
    LOG(null, 1024),
    LOG(16, null),
    LOG(null, null)
FROM DUAL;

Wynik:

   LOG(NULL,1024)    LOG(16,NULL)    LOG(NULL,NULL) 
_________________ _______________ _________________ 
             null            null              null 

Domyślnie SQLcl i SQL*Plus zwracają spację za każdym razem, gdy w wyniku polecenia SQL SELECT wystąpi wartość null oświadczenie.

Możesz jednak użyć SET NULL aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null należy zwrócić.

Brakujące argumenty

Wywołanie LOG() z niewłaściwą liczbą argumentów lub bez żadnych argumentów powoduje błąd:

SELECT LOG()
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LOG()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

Oraz:

SELECT LOG(10, 2, 3)
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT LOG(10, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*Cause:    
*Action:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja SQRT() w Oracle

  2. Błąd podczas drukowania zmiennej REFCURSOR jako parametru OUT w procedurze w Oracle 11g

  3. Jak dodać „ON DELETE CASCADE” w instrukcji ALTER TABLE?

  4. System.Data.OracleClient wymaga oprogramowania klienckiego Oracle w wersji 8.1.7

  5. Jaka jest różnica między ROWNUM a ROW_NUMBER w bazie danych Oracle?