프로시저 -> 일반적으로 어떤 행동을 하기 위한 일련의작업순서이며
하나의 프로시저는 특정작업에 대한 프로그램의 일부를 가지고 있다.
트리거 -> 데이터변경이 실행될때 자동으로 같이 실행되는 프로시저
->예를 들어 삽입하면서 삽입한 데이터를 자동으로 기록 할때 사용
프로시저 안에 insert 불러오는 코드
public void insertMember() throws SQLException{String id="procedure";String pass="1234";String name="홍길동";int age =19;String addr="강원도";String email="hong@abc.com";// statement 대신 사용 프로시저 넘길때 NewMember를 불러오겠다CallableStatement cs = conn.prepareCall("{call newmemeber(?,?,?,?,?,?)}");cs.setString(1, id);cs.setString(2, pass);cs.setString(3, name);cs.setInt(4,age); // IN OUT 둘다 설정cs.setString(5,addr);cs.setString(6, email);cs.execute();System.out.println("insert success");}
그냥 insert 하는 코드 직접 sql문을 작성해야함
public void insert() {try {stmt = conn.createStatement();String sql ="INSERT INTO member2 VALUES('Alpa','1234','AI',20,'LA','go@ai.com')";int count = stmt.executeUpdate(sql);if(count >0){System.out.println("insert success!");}else{System.out.println("insert fail!");}}catch(SQLException e) {System.out.println("insert fail");}finally {try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
프로시저 IN OUT 개념
create or replace PROCEDURE compute_power(
a_num in PLS_INTEGER,
b_num in out PLS_INTEGER,
c_num out PLS_INTEGER
)is
begin
IF b_num <0 then
b_num:=0;
end if;c_num:=1;FOR i in 1.. b_num loop --> 반복해서 곱하기
c_num:= c_num*a_num;
end loop;end;
Main 에서 oracle에서 만든 프로시저 이용
// 프로시저 가져오기DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // throws sqlexceptionString url = "jdbc:oracle:thin:@localhost:1521:orcl";Connection con = DriverManager.getConnection(url,"SCOTT","oracle"); // oracle 연결int p1InValue = Integer.parseInt(args[0]); // 문자열을 숫자로 변환int p2InOutValue = Integer.parseInt(args[1]); // 문자열을 숫자로 변환// 프로시저의 a b 값을 받아서 사용int p3OutValue; // 받아온 값// statement 대신 사용 프로시저 넘길때 compute_power를 불러오겠다CallableStatement cs = con.prepareCall("{call compute_power(?,?,?)}");cs.setInt(1,p1InValue);cs.setInt(2,p2InOutValue); // IN OUT 둘다 설정cs.registerOutParameter(2, Types.INTEGER); //IN OUT 둘다 설정cs.registerOutParameter(3, Types.INTEGER); // OUTcs.execute();p2InOutValue = cs.getInt(2); // 날라온 값을 저장p3OutValue = cs.getInt(3);System.out.println(p1InValue+"^"+p2InOutValue+"="+p3OutValue);
트리거
create or replace TRIGGER tyg_01
AFTER INSERT ON emp01
BEGIN
DBMS_OUTPUT.PUT_LINE('신입사원이 입사했습니다');
END;
- > emp01 테이블에 insert 값이 실행되면 그후에 tyg_01 이 실행되면서 신입사원이 입사했다는 결과 값이 나오게 된다 .