W poniższym przykładzie dodałem drugą funkcję „srednia_zarobkow_dzialu” różniącą się tylko jednym parametrem. Dodałem parametr id_managera aby wyświetlać średnie zarobków w danym dziale, obliczane na podstawie zarobków pracowników podległych konkretnemu managerowi w tym dziale.
Następnym krokiem było rozbudowanie części implementacji pakietu o ciało nowej funkcji:
Mogę teraz wykorzystać obie wersje funkcji, a to która z nich zostanie użyta zależeć będzie od ilości podanych parametrów:
Ten temat omawiam na poniższych szkoleniach:
• Programowanie w PL/SQL
• Podstawy SQL i PL/SQL
Możesz w nich uczestniczyć, a jako czytelnik tego bloga otrzymasz 10% zniżki - poinformuj o tym fakcie konsultanta.
Trafiłem kiedyś na niezrozumiałe zachowanie Oracle 11 Enterprise (nie sprawdzałem tego na innych wersjach) podczas wykonywania kodu odwołującego się do przeciążonych procedur.
OdpowiedzUsuńW pakiecie deklaracje wyglądały mniej więcej tak:
PROCEDURE zrob_cos (p_param varchar2) (...)
PROCEDURE zrob_cos (p_param DATE) (...)
Podczas wywołania:
zrob_cos('')
dostałem komunikat 'istnieje za dużo procedur spełniających warunek wywołania'. Jednak podczas takiego wywołania:
zrob_cos(to_date(''))
została już wywołana procedura z typem argumentu DATE.
Czy to jest normalne zachowanie? Wszak to_date('') wciąż jest NULL tak samo jak ''.
Dziwne, ja na swojej wersji zrob_cos('') mam wywolanie procedury z parametrem varchar2 co nie specjalnie mnie dziwi bo '' to nie jest null tylko pusty tekst (wartosc tekstowa o dlugosci 0) co powinno byc odroznione od null. zrob_cos(to_date('')) wiadomo ze wywoluje procedure z parametrem to_date.
OdpowiedzUsuń