프로시저

w ho
5 min readFeb 10, 2020

--

프로시저 -> 일반적으로 어떤 행동을 하기 위한 일련의작업순서이며
하나의 프로시저는 특정작업에 대한 프로그램의 일부를 가지고 있다.

트리거 -> 데이터변경이 실행될때 자동으로 같이 실행되는 프로시저
->예를 들어 삽입하면서 삽입한 데이터를 자동으로 기록 할때 사용

NEWMEMBER라는 프로시저 생성 — insert라는 함수를 사용 insert를 직접 만들어서 사용할수 도 있지만 sql 문이 복잡해지거나 다른 복잡한 함수를 이용할때 프로시저를 사용하여 불러와서 사용하면 편해서 프로시저를 사용함!!

프로시저 안에 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 이 실행되면서 신입사원이 입사했다는 결과 값이 나오게 된다 .

--

--

No responses yet