transakcja autonomiczna w javie i oracle
starko - 07-09-2007 00:01
transakcja autonomiczna w javie i oracle
Witam,
Próbuję właśnie napisać wbudowaną procedurę w oracle'u która uruchamiałaby zapytanie w transakcji autonomicznej. Problem wygląda tak: chciałbym mieć tabelę która przy każdym select-ie bylaby updateowana (ew. sprawdzane bylyby pewne warunki). Dokładniej chodzi o widok, który byłby aktualizowany. Problem polega na tym,że stworzę widok który wyglada nastepujaco: select * from tabela where (select procedura_aktualizujaca from dual) = 1;
Procedura jest napisana w javie i zmienia właśnie powyższą tabelę. Ponieważ nie można używać DDL-a wewnątrz takiego zapytania, dostaję wyjątek. Problem udało się obejść w pl/sql gdzie można dodać "pragma autonomous_transaction", niestety w javie tak się to nie uda. Spotkał się ktoś może z takim problemem? Będę wdzięczny za pomoc.
Pozdrawiam, Konrad Starzyk
Thomas Olszewicki - 07-09-2007 00:01
On Sep 6, 5:22 am, starko <konrad.star...@gmail.com> wrote: > Witam, > > Próbuję właśnie napisać wbudowaną procedurę w oracle'u która > uruchamiałaby zapytanie w transakcji autonomicznej. Problem wygląda > tak: chciałbym mieć tabelę która przy każdym select-ie bylaby > updateowana (ew. sprawdzane bylyby pewne warunki). Dokładniej chodzi o > widok, który byłby aktualizowany. Problem polega na tym,że stworzę > widok który wyglada nastepujaco: > select * from tabela where (select procedura_aktualizujaca from dual) > = 1; > > Procedura jest napisana w javie i zmienia właśnie powyższą tabelę. > Ponieważ nie można używać DDL-a wewnątrz takiego zapytania, dostaję > wyjątek. Problem udało się obejść w pl/sql gdzie można dodać "pragma > autonomous_transaction", niestety w javie tak się to nie uda. > Spotkał się ktoś może z takim problemem? > Będę wdzięczny za pomoc. > > Pozdrawiam, > Konrad Starzyk
Konrad, Mam nadzieje, ze to naprawde konieczne rozwiazanie. Ogolnie uruchamianie INSERT,UPDATE or DELETE automatycznie gdy robisz select nie jest zalecane (...)
Napisz Pl/SQL procedure z PRAGMA AUTHONOMOUS_TRANSACTION ktora wywoluje Java stored procedure. Tu zakladam ze Twoja Java procedure jest na Oracle. To powinno wywolac DML ( UPDATE and COMMIT ) bez naruszanie glownej transakcji.
Napisz co chcesz osiagnac. Oracle ma wbudowane funkcje "Fine Grained Audit" ktore umozliwiaja audit Select statements.
HTH Thomas
starko - 08-09-2007 00:05
Dzięki za odpowiedź:)
No więc jest to część projektu integracji różnorodnych źródeł danych. Póki co zastanawiam się jeszcze nad strukturą całości, więc każda rada byłaby bardzo pomocna. Ogólnie rzecz biorąc chciałem osiągnąćcoś takiego (z punktu widzenia Oracle, bo projekt obejmuje też inne źródła danych): Chciałbym mieć kilka tabel (lub widoków) które zawierałyby dane pochodzące z innych źródeł danych. Całość powinna działać przezroczyście, tzn. update na takiej tabeli powinien uaktualnić źródło danych. Analogicznie zmiana w źródle danych powinna być wiodoczna w bazie. Ponieważ jest to projekt (praca inżynierska) na uczelnię mam pewną dowolność, ale chciałbym zintegrować excela,pliki xml i być może lotus notes. Jeżeli chodzi o modyfikowanie tabeli przy select-ie, wiem o tym że nie jest to najpiękniejsze rozwiązanie, ale nie przychodzi mi nic innego do głowy (do rozważenia jest jeszcze uruchamianie funkcji co jakiś czas). Jeżeli widzisz jakieś sensowne rozwiązanie tego problemu będę bardzo wdzięczny za pomoc, nie chcę się wpakować w jakieś bezmyślne rozwiązanie. Pozdrawiam, Konrad Starzyk
Thomas Olszewicki - 08-09-2007 00:05
On Sep 7, 2:23 pm, starko <konrad.star...@gmail.com> wrote: > Dzięki za odpowiedź:) > > No więc jest to część projektu integracji różnorodnych źródeł danych. > Póki co zastanawiam się jeszcze nad strukturą całości, więc każda rada > byłaby bardzo pomocna. Ogólnie rzecz biorąc chciałem osiągnąć coś > takiego (z punktu widzenia Oracle, bo projekt obejmuje też inne źródła > danych): > Chciałbym mieć kilka tabel (lub widoków) które zawierałyby dane > pochodzące z innych źródeł danych. Całość powinna działać > przezroczyście, tzn. update na takiej tabeli powinien uaktualnić > źródło danych. Analogicznie zmiana w źródle danych powinna być > wiodoczna w bazie. Ponieważ jest to projekt (praca inżynierska) na > uczelnię mam pewną dowolność, ale chciałbym zintegrować excela, pliki > xml i być może lotus notes. > Jeżeli chodzi o modyfikowanie tabeli przy select-ie, wiem o tym że nie > jest to najpiękniejsze rozwiązanie, ale nie przychodzi mi nic innego > do głowy (do rozważenia jest jeszcze uruchamianie funkcji co jakiś > czas). Jeżeli widzisz jakieś sensowne rozwiązanie tego problemu będę > bardzo wdzięczny za pomoc, nie chcę się wpakować w jakieś bezmyślne > rozwiązanie. > Pozdrawiam, > Konrad Starzyk
Konrad, Ciekawy temat, choc troche akademicki. Jak do tej pory spotkalem sie tylko z integracjia baz danych o podobnej sile. Oracle z Oracle,DB2, MSSQL, Informix ect. Poszukaj w Oracle docs "Database link" do integracji roznych baz Oracle "Oracle hetergeneous connectivity" - do integracji non-Oracle i Oracle databases. Oracle uzywa ODBC connection, wiec teoretycznie mozesz polaczy sie nawet z DBASE.
"Transparent Gateway Agents" - do integracji i emulacji Oracle database na non-Oracle database. Oracle posiada ogromna ilosc packages do obslugi XML files i schemas. Wszystko napisane w Java i skompilowane jako Oracle Java Stored procedure.
Nie spotkalem sie z integracja z Excel lub Lotus notes.
To moze byc Twoje wyjscie: Uzyc "Oracle hetergeneous connectivity" do integracji z innymi bazami, Twoje wlasne programy w Java skompilowane w Oracle jako Java Stored Procedures do obslugi Excel i Lotus Notes.
Dalej nie bardzo rozumiem czemu chcesz run INSERT,UPDATE,DELETE z Select statement.
HTH Thomas
starko - 09-09-2007 00:04
Wiesz, to że ja potrzebowałem triggerów na select wynikało z tego jaki miałem pomysł rozwiązania tego problemu, szczerze mówiąc nie wiedziałem o Oracle hetergenous connectivity, zaraz się za tym rozejrze. Ogólnie rzecz biorąc mój pomysł był taki, żeby stworzyć tabele/widoki, przy czym każda z nich mogłaby być "połączona" z innym źródłem danych. I na tych tabelach stworzyć widok, wraz odpowiednimi triggerami, który można byłoby updateować. Przy update takiej tabeli dane byłby odsyłane do pierwotnego źródła danych. Mówisz że problem jest akademicki - no cóż to jest praca inżynierska, dokładniej chodzi o Integrację heterogenicznych źródeł danych (na poziomie danych). Oracle jest jednym ze źródeł które powinniśmy zintegrować, ale praca obejmuje też integrację np XML-a z Excelem czy katalogiem LDAP (przykładowo). Idea jest jednak taka by nie tworzyć jednego systemu który kontroluje całość, tylko wykorzystać wbudowane mechanizmy (procedury wbudowane, makra w excelu) tam gdzie jest to możliwe. Integracja - przynajmniej jak ja ją rozumiem powinna działać tak że zmiany w źródłach danych powodują aktualizację danych wyjściowych i odwrotnie. Jeżeli możesz jeszcze coś podpowiedzieć będę wdzięczny. Pozdrawiam, Konrad Starzyk
Thomas Olszewicki - 11-09-2007 00:09
On Sep 8, 4:46 am, starko <konrad.star...@gmail.com> wrote: > Wiesz, to że ja potrzebowałem triggerów na select wynikało z tegojaki > miałem pomysł rozwiązania tego problemu, szczerze mówiąc nie > wiedziałem o Oracle hetergenous connectivity, zaraz się za tym > rozejrze. Ogólnie rzecz biorąc mój pomysł był taki, żeby stworzyć > tabele/widoki, przy czym każda z nich mogłaby być "połączona" zinnym > źródłem danych. I na tych tabelach stworzyć widok, wraz odpowiednimi > triggerami, który można byłoby updateować. Przy update takiej tabeli > dane byłby odsyłane do pierwotnego źródła danych. > Mówisz że problem jest akademicki - no cóż to jest praca inżynierska, > dokładniej chodzi o Integrację heterogenicznych źródeł danych (na > poziomie danych). > Oracle jest jednym ze źródeł które powinniśmy zintegrować, ale praca > obejmuje też integrację np XML-a z Excelem czy katalogiem LDAP > (przykładowo). Idea jest jednak taka by nie tworzyć jednego systemu > który kontroluje całość, tylko wykorzystać wbudowane mechanizmy > (procedury wbudowane, makra w excelu) tam gdzie jest to możliwe. > Integracja - przynajmniej jak ja ją rozumiem powinna działać tak że > zmiany w źródłach danych powodują aktualizację danych wyjściowych i > odwrotnie. > Jeżeli możesz jeszcze coś podpowiedzieć będę wdzięczny. > Pozdrawiam, > Konrad Starzyk
Konrad, Moja wiedza ogranicza sie tylko do integracji Oracle z innymi zrodlami. Twoj pomysl do uzycia views jest dobry. W Oracle mozesz uzyc INSTEAD OF Triggers polaczone do views: Zobacz: http://download.oracle.com/docs/cd/B...htm#sthref3240 Taki trigger jest uruchomiony za kazdym razem gdy chcesz wykonac DML.
Inny pomysl to uzycie Oracle :External Tables Zobacz: http://download.oracle.com/docs/cd/B...htm#sthref1800 Exernal table to Oracle table polaczony do zbioru tekstowego. Dziala prawie jak zwykly Oracle table: INSERT, UPDATE DALETE.
HTH Thomas
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.plfantazia.htw.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 |
|