Post by Marcin GoralskiW Oracle concatenacja stringow nie jest rownoznaczna z dodawaniem.
Przez znak + rozumiem concatenację a nie dodawanie (MSSQL też tak rozumie),
więc wszystko jest w porządku (kwestia symbolu).
Post by Marcin GoralskiW zwiazku z tym
select ulica || ' ' || nr_mieszkania || ' ' || miasto form adresy
zwroci Ci poprawna wartosc jesli nr_mieszkania bedzie null.
Zas _wymagane_ pola zalatwia sie constraintami i juz (NOT NULL)
Nie rozumiesz - mogę nie chcieć dawać ograniczenia na pole not null. W bazie
CHCĘ przechowywać niekompletne adresy (aby kiedyś można było łatwiej go
uzupełnić).
Ja mówiłem o sytuacji aby wyrażenie ulica+nr_mieszkania+miasto zwracało mi
nula gdy nie ma miasta, ale zeby nie zwracło mi nula gdy nie ma
nr_mieszkania.
Czyli baza jest niekompletna - zawiera adresy bez miasta (bo adresy bez
miasta będa mi potrzebne do czegoś innego np. do uzupełnienia danych w
późniejszym terminie) ale przy okazji np. wysyłki kartek świątecznych
zapytanie:
SELECT ulica+nr_mieszkania+miasto FROM adresy
ma mi zwrócić poprawny adres na kopercie (czyli bez żadnych dodatkowych
warunków ma wyrzucić adresy bez miasta).
Post by Marcin GoralskiSQL> select ulica || ' ' || mieszkanie || ' , ' || miasto from adr
2 where ulica is not null and miasto is not null;
ULICA||''||MIESZKANIE||','||MIASTO
------------------------------------------------------------------------
matejki 2c/3 , Warszawa
matejki , Gdansk
nie wiem jak w oraclu, ale domyślnie (wg ANSI) concatenacja z nullem daje
nulla, więc twoje zapytanie zwróci tylko jeden rekord:
matejki 2c/3, Warszawa
A z kolei jeżeli zmienię domyślne ustawienie CONCAT_NULL_YIELDS_NULL na OFF,
wtedy będę musiał jednak dodać ten warunek (WHERE miasto is not null) do
zapytania.
A dzięki rozróżnieniu NULLa i pustego stringa można tego uniknąć. Wiem, że
nie jest to wielkie usprawnienie, ale prosiłeś o przykłady.
RM