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

About Przemysław Kantyka

LinkedIn Profile I am a Consultant with 15 years of professional experience in Forms, Oracle, PL/SQL and APEX. I am a participant in the Oracle ACE program. As a Snowflake Data Engineer, I also work with data warehouse systems and perform analysis, ETL and tuning activities. I am also a co-organizer of Snowflake Meetup Group Poland and a speaker at international conferences (DOAG, Oracle Open World, APEX World). I am co-founder and developer of Oracle-Snowflake Connector. Visit dataconsulting.pl website
This entry was posted in Oracle APEX Fundamentals and tagged , , , . Bookmark the permalink.

Leave a Reply