Java ilə Oracle PL/SQL proqramlarının istifadəsi

Posted on 15 Fevral 2011. Filed under: Java, JDBC, Oracle, PL/SQL | Etiketlər: , , , , , , |


Bu yazıda Oracle verilənlər bazasındakı PL/SQL prosedur və funksiyalarının Java proqramında istifadəsini göstərəcəyəm.
Nümunə olaraq HR sxemasındakı EMPLOYEES cədvəlini istifadə edəcəyəm.
Əvvəlcə EMPLOYEES cədvəlinə yeni işçi əlavə etmək üçün aşağıdakı PL/SQL prosedurunu yazaq.

create or replace procedure add_employee(
  p_employee_id out employees.employee_id%type,
  p_first_name in employees.first_name%type,
  p_last_name in employees.last_name%type,
  p_email in employees.email%type,
  p_hire_date in employees.hire_date%type,
  p_salary in employees.salary%type,
  p_department_id in employees.department_id%type,
  p_job_id in employees.job_id%type
)
is
begin
  select employees_seq.nextval into p_employee_id from dual;

  -- Oracle 11g bazasında sequence obyektini aşağıdakı kimi istifadə etmək mümkündür. 
  --p_employee_id := employees_seq.nextval;
  
  insert into employees(employee_id, first_name, last_name, email, hire_date, salary, department_id, job_id)
  values( p_employee_id, p_first_name, p_last_name, p_email, p_hire_date, p_salary, p_department_id, p_job_id);
end add_employee;

Bu prosedurda yeni işçiyə aid id sütununun avtomatik generasiyası üçün EMPLOYEES_SEQ obyekti istifadə olunur və onun qiyməti p_employee_id parametrinə mənimsədilib geri qaytarılır. Buna görə də həmin parametr out olaraq təyin edilib.

Bu prosedurunu aşağıdakı anonim PL/SQL bloku ilə yoxlamaq olar.

DECLARE
  l_new_emp_id NUMBER;
BEGIN
  add_employee(p_employee_id => l_new_emp_id, p_first_name => 'Ulvi', p_last_name => 'Qasimov', 
      p_department_id => 60, p_job_id => 'IT_PROG', p_email => 'ulvi@yahoo.com', 
      p_hire_date => to_date('14.02.2011', 'dd.mm.yyyy'), p_salary => 2000);
  dbms_output.put_line('Yeni isci kodu =  ' || l_new_emp_id);
END;

Bu proseduru Java proqramından aşağıdakı kimi çağırmaq olar. Aşağıda ancaq lazımi kod bloklarını yazmışam, proyektin tam versiyasını aşağıdakı linkdən yükləyə bilərsiniz.
Java ilə PL/SQL prosedur və funksiyasını çağırmaq üçün CallableStatement sinifi istifadə olunmalıdır.

String sql = "";
CallableStatement callableStatement = null;
// Yeni isci elave etmek
long id = 0;
String firstName = "Əli";
String lastName = "Əliyev";
String email = "ali@yahoo7.com";
double salary = 2222.0;
String job = "IT_PROG";
Date hireDate = new Date(); // bu gunku tarix
long department = 60;

// ? işarələri parametrləri göstərir, sırasına uyğun olaraq məlumatları vermək lazımdır.
sql = "{call add_employee(?,?,?,?,?,?,?,?)}";
callableStatement =  connection.prepareCall(sql);

// 1-ci parameter <strong>p_employee_id</strong> out parametr olduğuna görə onu ayrıca qeyd etmək lazımdır. 
callableStatement.registerOutParameter(1, Types.INTEGER);
callableStatement.setString(2, firstName);
callableStatement.setString(3, lastName);
callableStatement.setString(4, email);
callableStatement.setDate(5, convert(new Date()));
callableStatement.setDouble(6, salary);
callableStatement.setLong(7, department);
callableStatement.setString(8, job);
// proseduru işlədirik
callableStatement.executeUpdate();
// p_employee_id parametrinin qiymətini çap edirik
id = callableStatement.getLong(1);
System.out.println("Yeni isci kodu = " + id);

Burada bir neçə vacib məqamlar var:
1.JDBC ilə PL/SQL prosedurunu çağırmağın sintaksisi aşağıdakı kimidir:
{call prosedur_adı(parametr1, parametr2, … parametrN)}
Burada hər bir parametr üçün bir sual işarəsi yazılmalıdır.
2.Out parametrlər aşağıdakı kimi təyin edilməlidir:
callableStatement.registerOutParameter(parametr_sira_nomresi, parametr_tipi);
Parametr tipi olaraq java.sql.Types sinifindəki sabit qiymətlərdən uyğun olanı göstərmək lazımdır.
3.executeUpdate() metodu ilə proseduru işlədirik və bundan sonra out parametrlərinin qiymətini oxuyuruq.

İndi isə PL/SQL funksiyasının Java ilə necə istifadə olunmağına baxaq.
Əvvəlcə aşağıdakı kimi sadə bir funksiya yazaq.

create or replace function topla(a in number, b in  number)
return number
is
begin 
  return a+b;
end topla;

Bu funksiyanı Java proqramından aşağıdakı kimi çağıra bilərik.

sql = "{call ? := topla(?,?)}";
callableStatement = connection.prepareCall(sql);
callableStatement.registerOutParameter(1, Types.INTEGER);
callableStatement.setInt(2, 5);
callableStatement.setInt(3, 7);
callableStatement.executeUpdate();
int netice = callableStatement.getInt(1);
System.out.println("Netice = " + netice);

Burada vacib olan məqam funksiyadan qayıdan qiymətin java ilə necə oxunmasıdır.
? := ifadəsində bərabərlikdən əvvəlki ? işarəsi funksiyadan qayıdan qiyməti saxlayan parametrdir və out rejimində təyin edilməlidir.

Ümid edirəm ki, aydın oldu.
Proyektin tam kodunu aşağıdakı linkdən yükləyə bilərsiniz.
http://www.boxca.com/qqsybk73v3ll/JdbcPlsql.zip.html

Make a Comment

Bir cavab yazın

Sistemə daxil olmaq üçün məlumatlarınızı daxil edin və ya ikonlardan birinə tıklayın:

WordPress.com Loqosu

WordPress.com hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Twitter rəsmi

Twitter hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Facebook fotosu

Facebook hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

Google+ foto

Google+ hesabınızdan istifadə edərək şərh edirsinz. Çıxış / Dəyişdir )

%s qoşulma

Bir Cavab to “Java ilə Oracle PL/SQL proqramlarının istifadəsi”

RSS Feed for Ramin Orucovun Java və Oracle bloqu Comments RSS Feed

Təşəkkürlər Ramin m, faydalı olacaq :)…


Where's The Comment Form?

    Haqqında

    Java ilə obyekt yönlü proqramlaşdırma, Java web proqramlaşdırma, Oracle SQL, PL/SQL proqramlaşdırma, optimallaşdırma

    RSS

    Subscribe Via RSS

    • Subscribe with Bloglines
    • Add your feed to Newsburst from CNET News.com
    • Subscribe in Google Reader
    • Add to My Yahoo!
    • Subscribe in NewsGator Online
    • The latest comments to all posts in RSS

    Meta

Liked it here?
Why not try sites on the blogroll...

%d bloqqer bunu bəyənir: