Oracle
 sql >> база данни >  >> RDS >> Oracle

Тази реализация съвместима ли е с SQL-92?

Не, отношението на Oracle към нули е идиосинкратично, различно от това на всички останали и несъвместимо със стандартите ANSI. В защита на Oracle обаче, той вероятно се е спрял и се е ангажирал с това лечение много преди да има стандарт ANSI, с който да се съгласува!

Всичко започва от факта, че Oracle съхранява низове с брой знаци, последван от данните за низа. NULL се представя от нулев брой символи без следващи низови данни - което е точно същото като празен низ (''). Oracle просто няма начин да ги различи.

Това води до известно странно поведение, като този случай на конкатенация. Oracle също има функция LENGTH за връщане на дължината на низ, но това е дефинирано по противоположен начин, така че LENGTH('') връща NULL, а не нула. И така:

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

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

което ми се струва, че нарушава основните математически принципи.

Разбира се, разработчиците на Oracle до такава степен са свикнали с това, че много от нас дори не виждат нищо нередно или странно в това – някои всъщност ще твърдят, че останалият свят греши и че празен низ и NULL са същото!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предава стойност, съхранена в PL/SQL променлива, в клауза IN

  2. Проблем с регулярен израз на Oracle

  3. Как да върна множество редове от съхранена процедура на oracle от множество курсори?

  4. Копиране на ред в същата таблица, без да се налага да въвеждате 50+ имена на колони (докато се променят 2 колони)

  5. Помощ за рекурсивна PL SQL заявка