Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função LOG() no Oracle


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: