2008. 7. 27. 15:56
MySQL/JDBC Function과 PROCEDURE 생성 및 호출
2008. 7. 27. 15:56 in 3. Implementation/DATABASE
1. MySQL에서 Function 생성
2. Function 호출 JDBC 예제
3. MySQL에서 Procedure 생성
4. Procdure 호출 JDBC 예제
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 ;
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();
}
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 ;
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();
}
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();
}