11 September 2006

Calling External Functions Inside PL/SQL

http://www.onesmartclick.com/interviews/intv01.jpg
Birçok yerde duymuşsunuzdur PL/SQL içinden işletim sistemine ait veya bir C veya Java program bloklarının çağırılabiliyor olduğunu. En basitinden işletim sistemine ait herhangi bir komutu çağırabilirseniz eğer, istediğiniz harici fıonksiyonları işletim sisteminin anlayacağı şekilde belirtip harici dosyayı çalıştırabilirsiniz. Harici fonksiyonlar, kimi zaman uygulamalarınız için gerekli olabilir. Nitekim bir defasında bana lazım olmuştu.(Ben java ile çözmüştüm.)
forums.oracle ve otn den edindiğim bilgiler doğrultusunda bu işlemin nasıl yapılabileceğini kısaca belirtmeye çalışacağım.
  • Bir java class ı yazıp bunun içinden shell komutları çalıştırmak. Bu java source unu da bir PL/SQL ile sarmallayıp işlemi gerçekleştirmek. Aşağıda java tarafında bu işi gerçekleyen komut bulunmaktadır. Tam bir örnek için tıklayınız...
   Runtime rt = Runtime.getRuntime();
   Process p = rt.exec( commandText );


  • dbms_scheduler paketi ile. Bu sayede sh uzantılı bir dosya oluşturup yapacağınız işlemi bu jobu çalıştırarak yapabilirsiniz. Job ı create ederken job_type => 'executable' parametresini vermek gerekiyor.

  • DBMS_PIPE paketi ile. Bu paket içine ilgili C fonksiyonunu yazıp çağırabilirsiniz. C içinden system() bıilt-in fonksiyonunu çağırarak işleminizi yapabilirsiniz. Daha sonra oracle içinden bir LIBRARY oluşturup bu library yi kullanabilirsiniz.

Ama şunu unutmamak gerekir ki, işletim sistemine ait komutların çağırılması güvenlik açısından sizde sıkıntı oluşturabilir. Çünkü işletim sisteminde komut çağırabilme hakkı, kimi art niyetli kişiler tarafından kullanılabilir.

No comments: