2008. 7. 27. 15:56

MySQL/JDBC Function과 PROCEDURE 생성 및 호출

1. MySQL에서 Function 생성

delimiter //
CREATE FUNCTION increment_bonus3
 (name VARCHAR(20), id INT) RETURNS DOUBLE
 BEGIN
  DECLARE bonus DOUBLE;
  SELECT emp_bonus INTO bonus FROM emp where emp_id = id and emp_name=name;
  SET bonus = bonus * 0.05;
  return (bonus);
 END; //
delimiter ;


2. Function  호출 JDBC 예제

public void callFunction() throws SQLException {
  String query = "{? = call increment_bonus3(?, ?)}";
  ctmt  = con.prepareCall(query);
  ctmt.setString(2, "이자바");
  ctmt.setInt(3, 9);
  ctmt.registerOutParameter(1,Types.DOUBLE);
  ctmt.execute();
  double bonus = ctmt.getDouble(1);
  System.out.print
    ("id가 9번이고 name이 이자바인 사람의 bonus는  ");
    System.out.println
    (bonus + " 로 변경되었습니다 ");
   ctmt.close();
 }


3. MySQL에서 Procedure 생성

delimiter //
ALTER PROCEDURE increment_bonus
 (IN name VARCHAR(20), IN id INT, OUT bonus DOUBLE)
 begin
 SELECT emp_bonus INTO bonus FROM emp where emp_id = id and emp_name=name;
 SET bonus = bonus * 0.05;
 end; //
delimiter ;


4. Procdure 호출 JDBC 예제

public void callProcedure() throws SQLException {
   String query = "{call increment_bonus(?, ?, ?)}";
   ctmt  = con.prepareCall(query);
   ctmt.setString(2, "이자바");
   ctmt.setInt(1, 9);
   ctmt.registerOutParameter(3,Types.DOUBLE);
   ctmt.execute();
   double bonus = ctmt.getDouble(3);  
   System.out.print
    ("id가 9번이고 name이 이자바인 사람의 bonus는  ");
    System.out.println
    (bonus + " 로 변경되었습니다 ");
   ctmt.close();
 }