Oracle - procedura

0

Witam,
Mam zadanie następującej treści:
Na bazie Oracle na schemacie ORA_1 są tabele
zamowienia_1
nr_zamowienia | pozycja | cena | opis
1 123 1000 monitor
2 321 580 klawiatura

czas_wykonania
dni | godziny | nazwa_tabeli_
pn#wt#pt 11:00#16:00 zamowienia_1
gdzie: pn – poniedziałek, wt – wtorek, pt – piątek , znak # jest separatorem

oraz procedura
ORA_1.przet_zamow(nazwa_tabeli)

Chciałbym zbudować procedurę ORA_1.procedura_XXX która będzie tworzyła „jednorazowego Joba”.
Dane wejściowe procedury (nazwa_tab) – nazwa tabeli.
W procedurze pobierana powinna być data systemowa (sysdate) np. 21/09/2010 2000, następnie powinno być sprawdzane czy nazwa_tab (parametr wywołania procedury) znajduje się w tabeli ORA_1.czas_wykonania. nazwa_tabeli_, jeśli tak wtedy powinien zostać wyznaczony najbliższy czas wystartowania Joba.
Zważywszy na to że 21/09 – to wtorek a więc według powyższych danych Job powinien się wykonać w piątek o godzinie 11:00 tzn 24/09/2010 1100.
jeżeli sysdate = 24/09/2010 1322 wtedy Job powinien wystartować /09/2010 1600
treść Joba to oczywiście wywołanie procedury: ORA_1.przet_zamow(nazwa_tab)

Jednym słowem chodzi o to aby po wywołaniu procedury ORA_1.procedura_XXX(nazwa_tab) był tworzony Job który uruchamia procedurę ORA_1.przet_zamow(nazwa_tab) o czasie skonfigurowanym w tabeli ORA_1.czas_wykonania

Czekam na pomoc

0

a konkretniej z czym masz problem?
policzeniem czasu? operacjami na stringach? czy damicznym budowaniu zapytan?
jaki "job" ma sie utworzyc? co to wg ciebie jest job?

0

Największy problem mam z:

  • wykorzystaniem separatora w tabeli czas_wykonania (a może zamiast pn#wt#pt zapisać monday#Tuesday...?)
  • implementacją logiki wyznaczania najbliższej daty uruchomiania procedury wg tabeli czas_wykonia
  • dla mnie job jest to zadanie wykonywane cyklicznie (stale zapisane, które można przełączyć w stan on-line lub off-line, ewentualnie usunąć) w bazie dla którego możemy określić interwał czasowy wykonania.
DBMS_JOB.SUBMIT (job =>: job_no, 
what =>proced_wykon('DO'), 
next_date => SYSDATE, 
interval =>'SYSDATE +3'); 
COMMIT; 
END; 

A tu chciałbym aby job się nie "zapisywał" tylko wykonał i "znikał"

Niestety nigdy nie uczyłem się SQL od podstaw, zostałem "rzucony" na głęboką wodę i muszę szybko nauczyć się pływać..:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1