Oracle: niezainicjowany pakiet - jak zabronic?
Leszek Pachura - 11-05-2007 12:31
Oracle: niezainicjowany pakiet - jak zabronic?
Czesc,
Mamy przykladowy pakiet:
create package TESTOWY is procedure PROC; end;
create package body TESTOWY is procedure PROC is begin -- tutaj tresc procedury PROC end;
begin -- tutaj inicjalizacja pakietu TESTOWY end;
Kiedy wywolamy TESTOWY.PROC() po raz pierwszy, wykonana zostanie sekcja inicjalizacyjna pakietu (np. zostanie odczytana jakas konfiguracja, etc.) Jesli w trakcie wykonywania tej sekcji zajdzie wyjatek, procedura PROC nie zostanie wykonana...
....ale tylko za pierwszym razem! Przy nastepnych razach, pomimo tego ze nasz pakiet nie zostal poprawnie (do konca) zainicjalizowany, metode PROC bedzie mozna odpalac.
Dlaczego Oracle sie tak zachowuje? Da sie to jakos madrze uniemozliwic - zeby z niezainicjalizowanego pakietu nie dalo sie korzystac?
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
astaroth - 11-05-2007 12:31
Może tak:
create package body TESTOWY is init_ok boolean := false;
procedure init is --tutaj inicjalizacja pakietu TESTOWY init_ok := true; end;
procedure PROC is begin if not init_ok then init; end; -- tutaj tresc procedury PROC end;
end;
Lucyna Witkowska - 11-05-2007 12:31
Leszek Pachura <pachuraWYTNIJTO@op.pl> napisał:
> Mamy przykladowy pakiet: > create package TESTOWY is (...)
> Kiedy wywolamy TESTOWY.PROC() po raz pierwszy, wykonana zostanie sekcja > inicjalizacyjna pakietu (np. zostanie odczytana jakas konfiguracja, etc.) Jesli > w trakcie wykonywania tej sekcji zajdzie wyjatek, procedura PROC nie zostanie > wykonana... > ...ale tylko za pierwszym razem! Przy nastepnych razach, pomimo tego ze nasz > pakiet nie zostal poprawnie (do konca) zainicjalizowany, metode PROC bedzie > mozna odpalac. > Dlaczego Oracle sie tak zachowuje?
Bo sekcja inicjalizacyjna wykonywana jest tylko przy pierwszym odwolaniu do obiektu pakietu.
> Da sie to jakos madrze uniemozliwic - zeby z > niezainicjalizowanego pakietu nie dalo sie korzystac?
Hm, a po co tworzyc pakiet, z ktorego ma nie można korzystac ;-) Nie znam problemu, ale: - sekcja inicjalizacyjna moze miec swoją obsługę wyjątków - w procedurze można częsci kodu wykonywac warunkowo w zaleznosci od wartosci zmiennych pakietu itd.
Pozdrowienia, LW
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
Oracle 19g +Insert +Insert +Insert...
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?=
=?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?=
MSSQL Express czy Oracle Express
=?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?=
=?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
zanotowane.pldoc.pisz.plpdf.pisz.plown-team.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|