Nawiązując do poprzedniego question, zastanawiałem się, czy jego zawsze można zastąpić dekodować przez CASE i co jest lepsze dla wydajności?CASE vs. dekodować
Odpowiedz
Jak zawsze z Oracle ... AskTom ...
Od tego post ...
Decode jest nieco niejasne - CASE jest bardzo jasne. Rzeczy, które są łatwe do zrobienia w dekodowaniu są łatwe do zrobienia w CASE, rzeczy, które są trudne lub w pobliżu niemożliwe do zrobienia z dekodowania są łatwe zrobić w CASE. CASE, logicznie mądry, wygrywa .
Wydaje się, że z punktu widzenia wydajności są one takie same, ponownie powyżej artykułu wspomina niektóre różnice prędkości, ale bez analizy porównawczej poszczególnych stwierdzeń, które trudno powiedzieć.
Kolejny punkt z tego samego artykułu: "dekodowanie jest funkcją, którą Oracle początkowo zapewniało wydanie bazy danych przed 8.1.6. Począwszy od 816, CASE to standardowy sposób na osiągnięcie te same wyniki " - Więc przy korzystaniu ze starszych wersji Oracle CASE może nie być dostępne. –
8.1.6 jest bardzo stary, myślę, 8.1.6 daty z 1999. – TTT
Dzięki @TTT, to interesujące. Właśnie zostałem zatrudniony do konwersji raportów Cognos 7 na Cognos 10 :). Teraz szukam przełączania instrukcji DECODE na CASE. –
Jest jedna wielka różnica między DECODE
i CASE
i że ma do czynienia z jak NULLs
są porównywane. DECODE
zwróci "true", jeśli porównasz NULL
do NULL
. CASE
nie będzie. Na przykład:
powróci "1".
CASE NULL
WHEN NULL THEN 1
ELSE 0
END
spowoduje zwrócenie "0". Trzeba by napisać go jako:
CASE
WHEN NULL IS NULL THEN 1
ELSE 0
END
Myślę, że jest to bardzo ważne rozróżnienie. Właśnie czytałem o dekoderze, próbując zastąpić go przypadkiem i zastanawiając się, dlaczego nie widzę takich samych rezultatów, gdy wartość kolumny ma zerową wartość. Dzięki za wyjaśnienie tego! – prabhu
select (DECODE(NULL, NULL, 1, 0)) from dual;
select (CASE
WHEN NULL IS NULL THEN 1
ELSE 0
END
)
from dual;
zwracają 1
nic tutaj, na co Cheran nie odpowiedział. – ceving
CASE jest stwierdzenie i dekodowania jest funkcją Możemy użyć CASE w klauzuli WHERE i nie mogą korzystać z Decode w klauzuli where. DECODE może sprawdzać operatory równości tylko wtedy, gdy CASE obsługuje wszystkie operatory relacyjne. DECODE można używać w sql tylko wtedy, gdy CASE może być użyte w SQL I PL/SQL CASE jest lepsze niż DECODE.
Można znaleźć więcej: http://www.oracleinformation.com/p/sql-tutorial.html
-1 dla "... i nie może używać DECODE w klauzuli where."DECODE jest funkcją i każda funkcja ma wartość zwracaną, a możesz użyć tej wartości zwracanej, aby sprawdzić względem innej wartości: DECODE (tbl.field, SearchList, SomeConstOrAField, theDefault) NOT IN (inna lista) lub DECODE (tbl.field, SearchList, SomeConstOrAField, theDefault) = coś itd. –
- 1. SQL CASE vs JOIN efficiency
- 2. SQL Server IIF vs CASE
- 3. Funkcja bazy danych VS Case Statement
- 4. MySQL - CASE vs IF Statement vs IF function
- 5. Case-niewrażliwy switch-case
- 6. Case to case in Scala
- 7. Visual Case 6.0 Case Statement
- 8. jak kodować/dekodować prosty ciąg
- 9. Scala Case Classes vs. Bufory protokołów z Akka przez sieć
- 10. Scala: kolejność definicji obiektu towarzyszącego vs klasy case
- 11. Przełącznik case case w skrypcie do kawy
- 12. Jak "dekodować URL" ciąg w Emacs Lisp?
- 13. UnicodeDecodeError: Kodek 'ascii' nie może dekodować
- 14. Jak mogę dekodować ciągi kodowane base64?
- 15. Elm: Jak dekodować dane z JSON API
- 16. używając FFmpeg, jak dekodować pakiety H264
- 17. Jak mogę dekodować token JWT w Androidzie?
- 18. Meteor DOMException: Nie można dekodować danych dźwiękowych
- 19. Jak napisać CASE MYSQL CASE z wieloma warunkami wyszukiwania?
- 20. JavaScript indexOf ignorować Case
- 21. grep --ignore-case --only
- 22. Select Case prawda
- 23. Ruby && = edge case
- 24. Warunkowa składnia instrukcji CASE
- 25. Jak działa CASE MySQL?
- 26. case-niewrażliwe array_unique
- 27. JPQL Like Case Insensitive
- 28. Dziwne zachowanie budowlane CASE
- 29. PHP: Case-niewrażliwy "array_diff"
- 30. wyrażenia regularne case-niewrażliwy
po prostu google „przypadek Oracle vs dekodowanie” i znaleźć wiele linków. Zasadniczo Przypadek jest lepiej czytelny, bardziej elastyczny i bardziej standardowy. – Rene