삭제용 오라클 함수
create or replace PROCEDURE sp_DEL_member
(
--매개변수 정의!
id IN member.username%TYPE,
rtval OUT NUMBER => int 아님!
)
IS
BEGIN
DELETE member WHERE USERNAME = ID;
IF sql%found THEN
DBMS_OUTPUT.PUT_LINE(ID||'가 삭제되었습니다.');
rtval := SQL%ROWCOUNT;
COMMIT;
else -- 존재하지 않은 id로 수정 시
DBMS_OUTPUT.PUT_LINE(ID||'ID가 존재하지 않아요');
rtval := SQL%ROWCOUNT;
END iF;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;-- 실행이 1개밖에 없어 의미 없지만 그래도 써놔
rtval := -1 ;
DBMS_OUTPUT.PUT_LINE('자식이 참조 중...');
END;
앞에꺼랑 다른 점은
앞의 함수는 아웃파라미터의 반환 결과가 우리가 알 수 있는 바로 문자열로 나왔다면
이 함수는 반환결과가 숫나로 나와서 나온결과를 봐선 직관적으로 삭제가 된건지 실패가 된건지 알 수가 없음
반환결과인 숫자를 우리가 알 수 있는 문자로 출력해야하기 때문에
switch 구문을 이용한다 !
public class DeleteProc extends IConnectImpl {
public DeleteProc() {
connect(ORACLE_URL,"KOSMO","KOSMO");
}
@Override
public void execute() throws Exception {
csmt = conn.prepareCall("{call sp_DEL_member (?,?)}");
//인파라
String user = getValue("삭제 할 아이디"); // 이렇게 나눠도 됨 아니면 csmt.setString(1,getValue("삭제 할 아이디"));
csmt.setString(1,user);
csmt.registerOutParameter(2,Types.NUMERIC); /// 이거 int도 아니고 integer도 아님!!!
csmt.execute();
//System.out.println("실행 결과(아웃파라):"+csmt.getString(2)); 이렇게 해버리면 그냥 0,1,-1 출력 됨. 뭔지 알 수 없음
int rtNum =csmt.getInt(2);
switch(rtNum) { // 변환값을 알아볼 수 있는 문자로 변환 해준다
case -1 : System.out.println("삭제불가 : 자식참고중"); break;
case 0 : System.out.println("아이디 존재하지 않음"); break;
default : System.out.println(user+"가 삭제되었습니다.");
}
close();
}
public static void main(String[] args) throws Exception {
new DeleteProc().execute();
}
}
'학원 > JDBC' 카테고리의 다른 글
10/24 27-15 (ResultSetType) (0) | 2022.10.24 |
---|---|
10/24 27-14 (IsmemberProc().CallableStatement) (0) | 2022.10.24 |
10/24 27-12 (UpdateProc.CallableStatement) (0) | 2022.10.24 |
10/24 27-11 (InsertProc.CallableStatement) (0) | 2022.10.24 |
10/24 27-10 (InsertProc.CallableStatement) (0) | 2022.10.24 |