Refiriéndose a una anterior question, me preguntaba si su siempre posible sustituir DECODE por CASO y cuál es mejor para el rendimiento?CASO vs DECODE
Respuesta
Como siempre con Oracle ... ... AskTom
De esta post ...
Decode es un tanto oscuro - CASE es muy muy claro. Las cosas que son fáciles de hacer en la decodificación son fáciles de hacer en CASO, las cosas que son difíciles o cerca de imposible de hacer con la decodificación son fáciles de hacer en CASO. CASE, lógicamente sabio, gana incuestionablemente.
Desde el punto de vista del rendimiento parece que están a punto de la misma, de nuevo por encima artículo menciona algunas diferencias de velocidad pero sin evaluación comparativa de los estados particulares que es difícil de decir.
Otro punto del mismo artículo: "decodificar es la función que Oracle proporcionó originalmente con versiones de la base de datos anteriores a 8.1.6. Comenzando con 816, CASE es la forma estándar de lograr los mismos resultados " - Entonces cuando se usan versiones anteriores de Oracle, CASE puede no estar disponible. –
8.1.6 es muy antiguo, creo que 8.1.6 data de 1999. – TTT
Gracias @TTT, eso es interesante. Me contrataron para convertir informes de Cognos 7 a Cognos 10 :). Ahora buscamos cambiar las declaraciones DECODE a CASE. –
Hay una gran diferencia entre DECODE
y CASE
y tiene que ver con la comparación de NULLs
. DECODE
devolverá "verdadero" si compara NULL
con NULL
. CASE
no lo hará. Por ejemplo:
DECODE(NULL, NULL, 1, 0)
devolverá '1'.
CASE NULL
WHEN NULL THEN 1
ELSE 0
END
devolverá '0'. Usted tendría que escribir como:
CASE
WHEN NULL IS NULL THEN 1
ELSE 0
END
Creo que esta es una distinción muy importante. Estaba leyendo sobre decodificación, tratando de reemplazarlo con mayúsculas y preguntándome por qué no estoy viendo los mismos resultados cuando el valor de una columna tenía valores nulos. Gracias por aclarar esto! – prabhu
select (DECODE(NULL, NULL, 1, 0)) from dual;
select (CASE
WHEN NULL IS NULL THEN 1
ELSE 0
END
)
from dual;
ambos devuelven 1
nada aquí que no haya sido respondido por Cherán. – ceving
CASE es una declaración y decodificar es una función Podemos usar el bolso en la cláusula where y no podemos usar el DECODE en la cláusula where DECODE puede verificar operadores de igualdad solo cuando CASE puede admitir todos los operadores relacionales DECODE se puede usar en sql solo donde como CASE se puede usar en SQL Y PL/SQL CASE es mejor que DECODE.
Puede encontrar más: http://www.oracleinformation.com/p/sql-tutorial.html
-1 para "... y no puede usar el DECODE en la cláusula where."DECODE es una función y cada función tiene un valor de retorno y se puede usar ese valor de retorno para comprobar contra algún otro valor:. DECODE (tbl.field, SearchList, SomeConstOrAField, theDefault) NO EN (alguna otra lista) o DECODE (tbl.field, SearchList, SomeConstOrAField, theDefault) = algo etc. –
- 1. python eval vs ast.literal_eval vs JSON decode
- 2. json_encode/json_decode vs Zend_Json :: encode/Zend_Json :: decode
- 3. Método Factory - caso vs. reflexión
- 4. string decode utf-8
- 5. json decode en php
- 6. Decode CDATA en C#
- 7. Decode este extraño Javascript
- 8. ItemsSource vs DataContext en el caso
- 9. Decode Hex de cadenas en Python 3
- 10. codificación HTML decode C# MVC4
- 11. Decode base64 String Java 5
- 12. Decode cadena hexadecimal en Ruby
- 13. Función DECODE() en SQL Server
- 14. Decode pitón base 64 Cadena
- 15. Decode un marco de websocket
- 16. jQuery urlencode/decode parche ayuda
- 17. Alternativa estándar de SQL a Oracle DECODE
- 18. Decode un PHP codificado con 'zend guard'
- 19. php URL decode get '+' from URL
- 20. URLEncoder encode/URLDecoder decode en java (Android)
- 21. Decode un encabezado de correo electrónico UTF8
- 22. Decode imagen de bitarray JPEG2000 con Javascript
- 23. Decode & volver a & en JavaScript
- 24. Decode androide usando ffmpeg en tiempo real
- 25. Decode escasa JSON objeto de matriz PHP
- 26. PowerShell - Decode System.Security.SecureString a contraseña legible
- 27. Delphi 7 - Decode Base64 Usando TIdDecoderMIME
- 28. HTML5 SQLite vs Native Database en caso de PhoneGap
- 29. caso interruptor de Java - por defecto vs enumeración explícita
- 30. ¿Por qué utilizar BufferedReader en este caso?
acabo en Google "caso Oracle vs decodificación" y encontré un montón de enlaces. Básicamente Case es mejor legible, más flexible y más estándar – Rene