- 커서의 제어권을 외부로 전달할 때 사용
- java 에서는 ResultSet으로 전달받는다
사용법)
bind 변수 등록(SYS_REFCURSOR는 오라클에만 존재하는 커서)
- java.sql.Types.REF_CURSOR로 받을 수 없다 (error)
- Oracle에서 배포하는 jar파일(ojdbc8.jar)안에 oracle.jdbc.driver.OracleTypes 클래스를 사용하여 bind변수를 처리한다
cstmt.registerOutParameter(인덱스, OracleTypes.CURSOR );
- 프로시저 실행
cstmt.execute();
- out parameter에 할당된 값 받기
ResultSet rs = cstmt.getObject(인덱스);
var a refcursor
exec test( :a )
Create or replace procedure test( a out sys_refcursor )
SQLInjection
- 쿼리문을 외부에서 입력하는 것
- 개발자가 작성한 쿼리문을 예측한 후, 정보탈취용 쿼리문을 외부에서 입력하여 정보를 빼내가는 해킹 기법(OWASP에서 정리한 보안사고 중 1위)
로그인 수행 쿼리문
: 입력받은 아이디와 비밀번호로 조회된 레코드가 존재하면 로그인 성공, 로그인 실패
String sql = “select id from 테이블명 where id= ‘ “+id ” ’ and pass = ‘ “ + pass +” ’ ”;
입력값으로 쿼리문이 생성
String sql = “select id from 테이블명 where id= ‘ hong ’ and pass = ‘ 2134 ’ ”;
아이디에 ‘ or 1 = 1- -를 입력하고 비밀번호를 마음대로 넣으면
String sql= “select id from 테이블명 where id = ‘ ‘ or 1 =1 — -and pass = ‘2134’ ”;
아이디부분에 쿼리문이 삽입되어 항상 참인 결과가 나와 로그인이 된다