В Oracle, LOG()
функцията връща логаритъма, основа n2
, от n1
, където n2
е първият аргумент и n1
е вторият.
Синтаксис
Синтаксисът е така:
LOG(n2, n1)
Където n2
може да бъде всяка положителна стойност, различна от 0
или 1
и n1
е всяка положителна стойност.
Пример
Ето един пример:
SELECT LOG(16, 73)
FROM DUAL;
Резултат:
LOG(16,73) ___________________________________________ 1.54745613972000430746600429203996036707
Отрицателни стойности
Отрицателните стойности водят до грешка „извън обхвата“:
SELECT LOG(-16, 73)
FROM DUAL;
Резултат:
Error starting at line : 1 in command - SELECT LOG(-16, 73) FROM DUAL Error report - ORA-01428: argument '-16' is out of range
Същото за втория аргумент:
SELECT LOG(16, -73)
FROM DUAL;
Резултат:
Error starting at line : 1 in command - SELECT LOG(16, -73) FROM DUAL Error report - ORA-01428: argument '-73' is out of range
Нула
Подаване на 0
също води до грешка „извън обхвата“:
SELECT LOG(0, 73)
FROM DUAL;
Резултат:
Error starting at line : 1 in command - SELECT LOG(0, 73) FROM DUAL Error report - ORA-01428: argument '0' is out of range
И отново, същото важи и за втория аргумент:
SELECT LOG(16, 0)
FROM DUAL;
Резултат:
Error starting at line : 1 in command - SELECT LOG(16, 0) FROM DUAL Error report - ORA-01428: argument '0' is out of range
Подаване на 1
Подаване на 1
за втория аргумент води до 0
:
SELECT LOG(16, 1)
FROM DUAL;
Резултат:
LOG(16,1) ____________ 0
Подаване на 1
за първия аргумент води до грешка „извън обхвата“:
SELECT LOG(1, 2)
FROM DUAL;
Резултат:
Error starting at line : 1 in command - SELECT LOG(1, 2) FROM DUAL Error report - ORA-01428: argument '1' is out of range
Изрази
Аргументите могат да включват изрази като този:
SELECT LOG(10 + 6, 12 * 30)
FROM DUAL;
Резултат:
LOG(10+6,12*30) ___________________________________________ 2.12296327408241867769444932934625579835
Нечислови аргументи
Аргументите могат да бъдат всеки числов тип данни или всеки нечисловен тип данни, които могат да бъдат имплицитно преобразувани в числов тип данни.
Ето пример за това какво се случва, когато аргументите не отговарят на тези критерии:
SELECT LOG('Homer', 'Symptom')
FROM DUAL;
Резултат:
Error starting at line : 1 in command - SELECT LOG('Homer', 'Symptom') FROM DUAL Error report - ORA-01722: invalid number
Нулеви аргументи
LOG()
връща null
ако някой аргумент е null
:
SET NULL 'null';
SELECT
LOG(null, 1024),
LOG(16, null),
LOG(null, null)
FROM DUAL;
Резултат:
LOG(NULL,1024) LOG(16,NULL) LOG(NULL,NULL) _________________ _______________ _________________ null null null
По подразбиране SQLcl и SQL*Plus връщат празно пространство, когато се появи нулева стойност в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null
трябва да бъдат върнати.
Липсващи аргументи
Извикване на LOG()
с грешен брой аргументи или без никакви аргументи води до грешка:
SELECT LOG()
FROM DUAL;
Резултат:
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:
И:
SELECT LOG(10, 2, 3)
FROM DUAL;
Резултат:
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: