Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Czy ta implementacja jest zgodna z SQL-92?

Nie, podejście Oracle do wartości zerowych jest idiosynkratyczne, inne niż wszystkich innych i niezgodne ze standardami ANSI. Jednak w obronie Oracle prawdopodobnie przyjęło to rozwiązanie i było ono zaangażowane na długo przed tym, zanim pojawił się standard ANSI, z którym należałoby być zgodnym!

Wszystko zaczyna się od tego, że Oracle przechowuje ciągi znaków z liczbą znaków, po której następują dane ciągu. Wartość NULL jest reprezentowana przez liczbę znaków równą zero bez następujących danych ciągu — co jest dokładnie takie samo, jak pusty ciąg (''). Oracle po prostu nie potrafi ich odróżnić.

Prowadzi to do dziwacznych zachowań, takich jak ten przypadek konkatenacji. Oracle ma również funkcję LENGTH, która zwraca długość ciągu, ale została ona zdefiniowana w odwrotny sposób, tak że LENGTH('') zwraca NULL, a nie zero. A więc:

LENGTH('abc') + LENGTH('') IS NULL

LENGTH('abc' || '') = 3

co wydaje mi się naruszać podstawowe zasady matematyczne.

Oczywiście programiści Oracle są tak przyzwyczajeni do tego, że wielu z nas nie widzi w tym nic złego lub dziwnego – niektórzy w rzeczywistości twierdzą, że reszta świata się myli i że pusty ciąg i NULL to samo!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Typ danych Oracle Date, przekształcony na „RRRR-MM-DD HH24:MI:SS TMZ” za pomocą SQL

  2. Wyrażenie wielkości liter nie działa poprawnie w zapytaniu sql

  3. Znajdź najbardziej potomny węzeł rodzica (dowolny poziom) w Oracle

  4. Połączenie WildFly jdbc z Oracle

  5. Czy istnieje funkcja sum MD5 w PL/SQL?