Wpis z mikrobloga

@edgar_k: ale to chyba nie oracle. W oracle null to brak wartosci a pusty string to wartosc dlatego jedno nie rowna sie drugiemu.


@maniac777: W oracle, w oracle.
W każdej innej bazie która znam to działa jak piszesz, poza oracle ( ͡° ͜ʖ ͡°)
  • Odpowiedz
via Wykop Mobilny (Android)
  • 1
@Darksands: ostatni raz z Oracle to na studiach. Pamiętam jakiś toporny UI do zarządzania tym dziadostwem. SSMS jakie jest takie jest ale bije pod tym kątem wszystko inne
  • Odpowiedz
W oracle, w oracle.

W każdej innej bazie która znam to działa jak piszesz, poza oracle ( ͡° ͜ʖ ͡°)


@edgar_k: Albo ja rozumiem jakoś inaczej Twoją tezę albo wyjaśnij proszę precyzyjniej o co Ci chodzi bo null i pusty string to nie to samo w Oracle. Dowód:

SQL> select * from dual WHERE NULL = '';

no rows selected
  • Odpowiedz
@edgar_k: @Darksands co się tak czepiliście tego nulla? co w tym bolesnego że spać nie możecie? przeszliście z jakiegoś mssqla czy co:) Chyba gdzieś w okolicy oracle9 to powstało i przy varchar2. Po prostu insert '' jest konwertowane na insert nulla i tyle filozofii. Podejrzewam, że mają sporo korzyści w CBO przy takim podejściu. Rozróznianie pustego stringa od nulla według mnie jest bezsensowne. Nawet jak standard tak każe. Zawsze możecie użyć
  • Odpowiedz
@edgar_k: @Darksands co się tak czepiliście tego nulla? co w tym bolesnego że spać nie możecie? przeszliście z jakiegoś mssqla czy co:) Chyba gdzieś w okolicy oracle9 to powstało i przy varchar2. Po prostu insert '' jest konwertowane na insert nulla i tyle filozofii. Podejrzewam, że mają sporo korzyści w CBO przy takim podejściu. Rozróznianie pustego stringa od nulla według mnie jest bezsensowne. Nawet jak standard tak każe. Zawsze możecie użyć
  • Odpowiedz
@msilent: ?! To akurat powinno zwrócić rekordów wierszy w każdej bazie. Co chciałeś tutaj przekazać?

PS: Tam wyżej edgar ma rację. Oracle istotnie wewnętrznie "optymalizuje" pusty string do nulla na potrzeby porównań.
  • Odpowiedz
@maniac777: To zobacz ile zwróci. W oracle nie ma czegoś takiego jak pusty string/optymalizacja na potrzeby porównań. Cokolwiek przyrównasz do null'a to masz false. Musiałbyś pisać "is null" stąd te dziwaczne porównania w oracle tj;

(a is null and b is null) or a=b
tylko takie porównanie poprawnie porówna 2 kolumny o typie np. varchar2. Pusty string nie istnieje w Oracle, zawsze to NULL a NULL'a nie ma sensu porównywać operatorem
  • Odpowiedz
To zobacz ile zwróci.


@msilent: No sprawdziłem:
- Oracle 12.2 - zero rekordów
- Postgres 12 - zero rekordów
- MariaDB 10 - zero rekordów
- MySQL - zero rekordów
- MSSQL - zero rekordów

W oracle nie ma czegoś takiego jak pusty string/optymalizacja na potrzeby porównań.


@msilent: Z mojej perspektywy wygląda to jakby "optymializował" (celowo w cudzysłowie) dla celów porównań. W tabeli pusty string jest faktycznie zapisywany i jest
  • Odpowiedz