Az Oracle adatbázis-kezelője elérhető programozói interfészeken keresztül, mint például C-ből az OCI (Oracle Call Interface) segítségével, Javaból JDBC API-n (Java Database Connectivity) keresztül, .NET környezetből ODP.NET felhasználásával, vagy más programnyelvek esetén ODBC (Oracle Database Connectitity) segítségével. Az Oracle fejlesztők törekednek arra, hogy a napjainkban használt, szinte összes programnyelvből elérhető legyen az adatbázis, szállítóként pedig nem tehetik meg, hogy ne szenteljenek ennek elegendő figyelmet. Az egyes programnyelvekhez készített programozói interfészeken (API) keresztül azonban csak kliens-szerver architektúrában képesek a programok kommunikálni az adatbázis-kezelővel, tehát minden esetben csak a kliens kezdeményezhet, a szerver passzív szerepet tölt be. Szerepcsere ezzel a technológiával nem lehetséges.
ODP.NET (pl. C#) használata esetén lehetőségünk van a Database Change Notification featuret kihasználni, aminek a segítségével azonnal értesülhetünk az adatbázisban bekövetkezett változásokról. Ehhez a kliens oldali alkalmazásnak folyamatos kapcsolatban kell lennie az adatbázissal, így tudja feldolgozni az onnan kapott üzeneteket.
http://download.oracle.com/docs/cd/B28359_01/win.111/b28375/featChange.htm#CJAGGGHAVan lehetőség szerveroldalon, az Oracle példány címtartományán belül Java alkalmazás futtatására. Ezen lehetőség felhasználásával összetettebb üzleti logikát lehet megvalósítani adatbázisoldalon, ráadásul jelentős IPC (Inter Process Comunication) és hálózati overheadet spórolhatunk meg vele. További előnye a megoldásnak, hogy az alkalmazás indítását szerveroldalon kezdeményezhetjük, így tetszőleges adatbázis esemény hatására lefuttathatjuk, például triggerek segítségével. A hátránya azonban az, hogy csak a Java nyelven implementált programjaink használhatóak.
Létezik azonban egy univerzális megoldás arra a problémára, hogy adatbázis oldalon kezdeményezve tetszőleges programnyelven implementált alkalmazást lefuttathassunk. Az Oracle a fejlesztők rendelkezésére bocsát egy olyan technikát, amivel mindezt megvalósíthatják. Lehetőséget biztosít arra, hogy C (vagy Java) nyelven implementált eljárásokat PL/SQL eljárásként meghívhassunk. Ez a technika a külső eljárásnak (External Procedure) hívása, ami nem más, mint DLL (Dynamic Link Library) hívás PL/SQL kódból. Ha pedig van rá mód, hogy akármikor meghívjunk egy C függvényt, akkor minden olyan más programnyelven implementált kódot képesek vagyunk futtatni, ami futtatható az adott környezetben, vagy egy szkript segítségével működésre lehet bírni.
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28424/adfns_externproc.htm#ADFNS1402External procedure használata
Ahhoz, hogy egy C vagy Java nyelven implementált programot meghívhassunk Oracle környezetből, három feladatot kell helyesen megvalósítani: Load, Publish & Call.
Load
Először be kell tölteni a szükséges DLL-t vagy java osztályt, másképp nem tudjuk meghívni.
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28424/adfns_externproc.htm#i1006311Publish
Utána rögzíteni kell a meghívható függvények nevét, paraméterlistáját és a visszatérési érték típusát. Ezek után szinte ugyanúgy kezelhető, mint egy belső PL/SQL tárolt eljárás.
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28424/adfns_externproc.htm#i1006405Call
Nincs más hátra, mint a PL/SQL környezetből meghívni az így elérhetővé tett külső eljárásokat.
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28424/adfns_externproc.htm#i1007572Microsoft SQL Server
Ugyan úgy, mint az Oracle adatbázis, az SQL Server is elérhető különféle adatbáziskapcsolat-kezelő API-kon keresztül (például ODBC). Java nyelvből a JDBC API, C# esetén pedig az ADO.NET használható. Ezeken keresztül azonban csak a kliens kezdeményezheti a kapcsolatot.
A .NET CLR (Common Language Runtime) integrálva van az SQL Server-be, így könnyen lehet olyan menedzselt .NET kódot (pl. C#) írni, amit tárolt eljárásként (Managed (CLR) Stored Procedure) lehet közvetlenül hívni a szerveroldali T-SQL kódból. Ennek a technikának az alkalmazásával elérhetjük, hogy bonyolultabb üzleti logikát is bele lehessen csempészni a szerveroldali programozásba. Értem itt ezalatt, hogy az adatkezelést a T-SQL-re bízzuk, azonban az adatok feldolgozását .NET kóddal végezzük, így mindenki azt csinálhatja amire kitalálták. .NET-ből akár más, tetszőleges program hívható/indítható.
http://msdn.microsoft.com/en-us/library/ms131045.aspxAz SQL Server lehetőséget ad arra, hogy Microsoft Visual C vagy C++ kódot lehessen hívni szerver oldalról (Extended Stored Procedure). Ehhez kódunkból az Opends60.lib fájllal linkelt DLL-t kell készíteni, majd a sp_addextendedproc T-SQL tárolt eljárással regisztrálni. Ezek után már ugyan úgy használható, mint egy belső tárolt eljárás. A kód annak a címtartományában fog futni, ahonnan meghívták. Kezelése nagyon hasonló az Oracle External Procedure-éhez.
http://support.microsoft.com/kb/190987
Nincsenek megjegyzések:
Megjegyzés küldése