Simple Checkbox w Oracle APEX , a wartość NULL.

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).

Ten wpis został opublikowany w kategorii Oracle APEX Fundamentals i oznaczony tagami , , , . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz