Proste pole zaznaczenia (simple checkbox) na raportach tabelarycznych w Oracle APEX , a wartość NULL.
Na raportach tabelaryczych często stosuje się pola zaznaczenia, które są bardzo czytelną i łatwą w obsłudze formą oznaczenia rekordu, że spełnia jakiś warunek lub nie.
Baza danych Oracle nie posiada typu BOOLEAN w tabelach w związku z czym zazwyczaj kolumny które powinny odzwierciedlać dwa stany (PRAWDA/FAŁSZ, TAK/NIE, KOBIETA/MĘŻCZYZNA itp.) realizuje się jako kolumny typu CHAR(1). Wtedy np. PRAWDA to ‘P’, FAŁSZ to ‘F’ (lub odpowiednio ‘T’/’F’), TAK to ‘T’, NIE to ‘N’ (‘Y’/’N’) itd. Każdy z takich przypadków można obsłużyć w Oracle APEX przy użyciu kolumny typu “simple checkbox”. Określa się to we właściwościach kolumny:
Trzeba jeszcze podać jakie wartości ma zwracać zaznaczenie i odznaczenie pola. To określa się we właściwościach w polu “” (niefortunnie nazwanego w tym kontekście). Pole (dla Simple Checkbox) ma format:
WARTOSC_ZAZNACZONEGO, WARTOSC_NIEZAZNACZONEGO
Wartości te nie muszą być jednoznakowe, ale muszą oczywiście być zgodne z typem kolumny. Przykładowo można ustawić LOV na: Y,N co spowoduje wpisanie do kolumny wartości Y jeśli pole wyboru zostanie zaznaczone i N jeśli zostanie odznaczone. Działający przykład jest widoczny pod adresem http://apex.oracle.com/pls/apex/f?p=60357:1:1537984474490601::::: Kolumna Awarded jest właśnie polem zdefiniowanym jako CHAR(1), jej lista wartości zdefiniowana jest jako Y,N co powoduje że pole przyjmuje te 2 wartości zależnie od zaznaczonego pola. Ale czy tylko? Na dole strony http://apex.oracle.com/pls/apex/f?p=60357:1:1537984474490601::::: wyświetlona jest zawartość tabeli i wyraźnie widać, że część pól ma wartość N, a część NULL i obie wyświetlane są jako checkbox niezaznaczony.Pole jest zatem trójstanowe!
NULL został wpisany do kolumny w momencie dodawania kolumny do tabeli, bez określenia jej wartości domyślnej. Wartość N pojawi się w polu po kliknięciu “Submit”, dla tych rekordów które były wyświetlane w formularzu tabelarycznym i pozostały niezaznaczone. Czyli zaznaczenie pola wpisze wartość Y, odznaczenie wartość N, a NULL to pozostałość po ALTER TABLE. Może to rodzić wiele problemów.
Jeśli chcemy aby wartości NULL nie było w ogóle można wzmusić to poleceniem
UPDATE emp SET awarded = 'N' WHERE awarded IS NULL; ALTER emp MODIFY awarded NOT NULL;
Jeśli zaś chcemy aby NULL występował i był wpisywany do pola gdy pozostanie ono odznaczone – możemy to uzyskać wpisując we właściwościach pola w “List of values”: ‘Y,’ (oczywiście bez cudzysłowów). Jest tak zrobione dla pola ADVANCED, które jest faktycznie dwustanowe (przyjmuje wartości Y lub NULL).