No Oracle, o
LOG()
função retorna o logaritmo, base n2
, de n1
, onde n2
é o primeiro argumento e n1
é o segundo. Sintaxe
A sintaxe fica assim:
LOG(n2, n1)
Onde
n2
pode ser qualquer valor positivo diferente de 0
ou 1
e n1
é qualquer valor positivo. Exemplo
Aqui está um exemplo:
SELECT LOG(16, 73)
FROM DUAL;
Resultado:
LOG(16,73) ___________________________________________ 1.54745613972000430746600429203996036707
Valores negativos
Valores negativos resultam em um erro "fora do intervalo":
SELECT LOG(-16, 73)
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT LOG(-16, 73) FROM DUAL Error report - ORA-01428: argument '-16' is out of range
O mesmo para o segundo argumento:
SELECT LOG(16, -73)
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT LOG(16, -73) FROM DUAL Error report - ORA-01428: argument '-73' is out of range
Zero
Passando
0
também resulta em um erro "fora do intervalo":SELECT LOG(0, 73)
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT LOG(0, 73) FROM DUAL Error report - ORA-01428: argument '0' is out of range
E novamente, o mesmo se aplica ao segundo argumento:
SELECT LOG(16, 0)
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT LOG(16, 0) FROM DUAL Error report - ORA-01428: argument '0' is out of range
Passando 1
Passando
1
para o segundo argumento resulta em 0
:SELECT LOG(16, 1)
FROM DUAL;
Resultado:
LOG(16,1) ____________ 0
Passando
1
para o primeiro argumento resulta em um erro "fora do intervalo":SELECT LOG(1, 2)
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT LOG(1, 2) FROM DUAL Error report - ORA-01428: argument '1' is out of range
Expressões
Os argumentos podem incluir expressões como esta:
SELECT LOG(10 + 6, 12 * 30)
FROM DUAL;
Resultado:
LOG(10+6,12*30) ___________________________________________ 2.12296327408241867769444932934625579835
Argumentos não numéricos
Os argumentos podem ser qualquer tipo de dados numérico ou qualquer tipo de dados não numérico que possa ser convertido implicitamente em um tipo de dados numérico.
Aqui está um exemplo do que acontece quando os argumentos não satisfazem esse critério:
SELECT LOG('Homer', 'Symptom')
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT LOG('Homer', 'Symptom') FROM DUAL Error report - ORA-01722: invalid number
Argumentos nulos
LOG()
retorna null
se algum argumento for null
:SET NULL 'null';
SELECT
LOG(null, 1024),
LOG(16, null),
LOG(null, null)
FROM DUAL;
Resultado:
LOG(NULL,1024) LOG(16,NULL) LOG(NULL,NULL) _________________ _______________ _________________ null null null
Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que um valor nulo ocorre como resultado de um SQL
SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Argumentos ausentes
Chamando
LOG()
com o número errado de argumentos ou sem argumentos resulta em um erro:SELECT LOG()
FROM DUAL;
Resultado:
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:
E:
SELECT LOG(10, 2, 3)
FROM DUAL;
Resultado:
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: