Java ile Oracle’da Stored Procedure Oluşturmak

24 Aralık 2008

Oracle

Oracle’ın Java’ya verdiği desteği bilmeyen yoktur. Bu gün Java ile Oracle veritabanı entegrasyonunu göstermek için Java ile bir stored procedure yazacağız. Stored procedure yazmaya başlamadan önce HR schemasının altında örnek bir tablo oluşturalım. Yazacağımız procedure bu tabloya INSERT yapacak. Eğer HR scheması değil de başka bir schema kullanmak istiyorsanız, ilerde anlatılan loadjava komutunda da aynı schema ismini vermeyi unutmayınız.

SQL> CREATE TABLE deneme (
ID NUMBER,
ISIM VARCHAR2(50),
EMAIL VARCHAR2(50)
);

Şimdi bu tabloya kayıt ekleyecek Java kodunu yazıyoruz. JDBC kullananlar DriverManager’da Oracle bağlantısını nasıl yazdığıma dikkat edeceklerdir. Bu kod, Oracle içerisinde çalışacağı için “varsayılan bağlantı” ile Oracle’a bağlanabiliyoruz.

import java.sql.*;
import oracle.jdbc.*;

public class JavaDeneme {

public static void deneme_tablosuna_kayit_ekle( int id, String isim, String email ) {

try {

Connection DB =
DriverManager.getConnection(“jdbc:default:connection:”);

String SQL =”INSERT INTO deneme VALUES (?,?,?)”;

PreparedStatement Komut = DB.prepareStatement(SQL);

Komut.setInt(1,id);
Komut.setString(2, isim );
Komut.setString(3, email );

Komut.executeUpdate();

Komut.close();

}
catch(SQLException e) {
System.err.println( “Hata olustu: ” + e.getMessage());
}
}
}

Bu kodları JavaDeneme.java olarak kaydediyoruz ve sonra Oracle ile birlikte gelen “loadjava” aracını kullanarak Oracle’a yüklüyoruz:

$ loadjava -u hr/hr -v -r JavaDeneme.java

Ben HR schemasına yükledim. Yüklediğimiz objeyi user_objects’i sorgulayarak görebiliriz:

SELECT object_name, object_type, status FROM user_objects WHERE object_name = ‘JavaDeneme’;

Java fonksiyonumuz (PLSQL için procedure çünkü değer döndürmüyor) için bir PLSQL procedure’ü oluşturuyoruz, böylece PLSQL içerisinden rahatlıkla çalıştırabileceğiz:

SQL> CREATE OR REPLACE PROCEDURE KayitEkle ( id NUMBER, isim VARCHAR2, email VARCHAR2 )
AS LANGUAGE JAVA
NAME ‘JavaDeneme.deneme_tablosuna_kayit_ekle(int, java.lang.String, java.lang.String )’;
/

Görüldüğü üzere PLSQL procedure’üne gönderilecek parametreleri karşılık gelen Java tiplerine çeviriyoruz ve Java objemize gönderiyoruz.

SQL> EXEC KayitEkle( 1, ‘Gokhan’, ‘gokhan@gokhan’ );
SQL> SELECT * FROM deneme;

Sorgunun sonucunda KayitEkle procedure’ü ile eklediğimiz kayıtlar görülecektir.

Bookmark and Share
,

Yazar:

Gökhan Atıl <gokhan@gokhanatil.com>

Veritabanı ve Unix uzmanı olarak Koç.Net'de çalışmaktadır. OCP (Oracle Certified Professional), Oracle Certified SQL Expert, Comptia Linux+ sertifikalarına sahiptir.

6 Responses to “Java ile Oracle’da Stored Procedure Oluşturmak”

  1. Resp:

    Internet üzerinde java ile ilgili döküman bulmak çok zor verdiğiniz bilgileri için teşekkürler.

  2. Yusuf:

    Makalenin adı “procedure oluşturmak” değil, “procedure çağırmak” olmalı.

  3. Gökhan Atıl:

    Yusuf, her ne kadar araya PL/SQL arayüzü koymak zorunda olsak da, yaptığımız işlem, Java ile yazdığımız function’ı stored procedure olarak veritabanına yüklemek. Başlığı “procedure çağırmak” olarak değiştirirsek, Java ile yazdığımız bir program içinden, Oracle’da tanımlanmış bir stored procedure’ü çağırıyormuşuz gibi bir anlam çıkmaz mı?

  4. Yusuf:

    İlk etapta yanlış anlamışım. Ama yine de başlık makaleye uygun değil gibi. Oluşturduğunuz java classlarını oracle procedure’leri içinde kullanıyorsunuz kısaca değil mi?

  5. Gökhan Atıl:

    Buradaki önemli nokta şu: Oluşturduğumuz Java class’ını, içerisindeki function’ı kullanabilmek amacıyla, “loadjava” aracı ile veritabanına yüklüyoruz. Yani derlenen Java class’ı veritabanında “bir veritabanı objesi” olarak tutuluyor. PL/SQL ile yazdığımız procedure’lerden tek farkı, bir tanımlamaya ihtiyaç duyması. Aslında yüklenen class’ın bir package gibi görev yaptığını düşünürsek, içindeki functionlar için tanımlama yapılması gayet normal.

  6. cem:

    Başlığın ne oldugunun bir önemi yok ama bilginin o kadar büyük bir önemi varki…


Leave a Reply