2011. január 27., csütörtök

Összetett makrók készítése LuaPlSql Plug-In for PL/SQL Developer - rel

OWB - mapek teljesítményhangolása közben kezdtem beleunni abba, hogy rutinszerű feladatokat ismételgetek újra és újra. A beépített makro funkciót használva az alap dolgaimat már sikerült automatizálnom, viszont egykét művelet, amit csinálok már túlmutat a makró rögzítés lehetőségein. A beépített makró csak billentyűzet inputokat tud rögzíteni.

A kísérletezgetés közben rátaláltam egy beállításra, ami makrók készítésénél jól tud jönni. Ha arra van szükségünk, hogy a result grid adatait is elérjük, akkor ezt el kell tudnunk érni billentyűzetkombinációk használatával. Be lehet állítani egy billentyűzetkombinációt a Key Configuration alatt az SQL Window: Switch between editor/results sorában. Ezt használva már képesek leszünk olyan makrókat is készíteni, amelyek felhasználják a futási eredményeket is.

Az egyik feladat, amit automatizálni akartam az, hogy könnyen meg tudjam nézni a MAP - em milyen konkrét SQL - t futtat. A manuális eljárás úgy nézett ki, hogy egy v%session lekérdezésből megtudom a futtatott sql_id azonosítót, ezt kimásolom, a v$sql sql_fulltext mezőből kikapom a teljes sql szöveget, ezt berakom egy SQL Window - ba és futtatok rá egy Beautifier - t, hogy olvasható legyen az egyébként generált kód. Ezt a műveletsort már több százszor el kellet játszanom, kezdtem unni. Makróval azonban nem tudtam megoldani a feladatot, mert sajnos a result grid CLOB mező tartalmához nem tudtam csak billentyűkkel hozzáférni.

Felmentem az fejlesztők oldalára, az allroundautomations.com - ra és elkezdtem kutakodni, létezik - e valamilyen Plug-In, amivel komolyabb feladatokat is automatizálni tudok. Így találtam rá a LuaPlSql Plug-In - re. Ez a program lehetővé teszi, hogy interpretált script nyelven programozva szabadon meghívhassuk a PL/SQL Developer Plug-In Interface függvényeit. Nem kell semmit sem fordítgatnunk, a Lua scripteket magában a Developer - ben is megszerkeszthetjük.

A mintapéldákat átnézve, kb. 2 óra alatt eljutottam odáig, hogy megírtam életem első, tökéletesen működő Lua script - jét, mely annyit tesz, hogy egy SQL Window - ban levő sql_id szöveget lecserél az adott sql_id - hoz tartozó sql teljes, formázott szövegére. Íme a script:

do
  local function f1(menuItem)
  SQL.Execute("select sql_fulltext from v$sql where sql_id = '" .. IDE.GetText() .. "'")
  IDE.SetText(SQL.Field(1))
  IDE.BeautifyWindow()
  end

  AddMenu(f1, "&Lua / v$sql")
end

Nem is olyan bonyolult.

Ennek felhasználásával már el tudtam készíteni a komplett makrómat, így kibővült az eszköztáram s most már egy klikkeléssel meg tudom nézni a futó sql - ek formázott szövegét, végrehajtási tervét, temp használatát és igény esetén egy klikk távolságra van a feladat megszakítása is.

Aki hozzám hasonló cipőben jár, azaz úgy érzi, rutin dolgokat csinál újra és újra, annak bátran ajánlom a LuaPlSql Plug-In – t! A makrókkal kombinálva egyszerűen és gyorsan lehet automatizálni akár komplex műveleteket is.

Nincsenek megjegyzések:

Megjegyzés küldése