커서
클라이언트 메모리 | 서버 프로세스 메모리 | SGA 라이브러리 캐시 | ||
---|---|---|---|---|
핸들 | → | Private SQL 영역 | → | 공유 SQL 영역 |
|
|
번호 | 단계 | 설명 |
---|---|---|
1 | 커서 열기(open cursor) | 서버 프로세스 메모리, Private SQL 영역 각각 메모리 할당 |
2 | 커서 파싱(parse cursor) |
|
3 | 출력 변수 정의 | SQL 이 반환하는 값을 받을 변수 정의 (SELECT, RETURNING 절 포함 DML) |
4 | 입력 변수 바인딩 | 바인드 변수 사용 SQL에 유효한 값 제공 |
5 | 커서 실행(execute cursor) | SQL 실행 |
6 | 커거 페치(Fetch cursor) |
|
7 | 커서 닫기(close cursor) | 핸들과 관련된 자원과 private SQL 영역이 해제, 공유 SQL 영역 유지 |
DECLARE
l_ename emp.ename%TYPE := 'SCOTT';
l_empno emp.empno%TYPE;
l_cursor INTEGER;
l_retval INTEGER;
BEGIN
l_cursor := dbms_sql.open_cursor;
dbms_sql.parse(l_cursor, 'SELECT empno FROM emp WHERE ename = :ename', 1);
dbms_sql.define_column(l_cursor, 1, l_empno);
dbms_sql.bind_variable(l_cursor, ':ename', l_ename);
l_retval := dbms_sql.execute(l_cursor);
IF dbms_sql.fetch_rows(l_cursor) > 0
THEN
dbms_sql.column_value(l_cursor, 1, l_empno);
dbms_output.put_line(l_empno);
END IF;
dbms_sql.close_cursor(l_cursor);
END;
DECLARE
l_ename emp.ename%TYPE := 'SCOTT';
l_empno emp.empno%TYPE;
BEGIN
SELECT empno INTO l_empno
FROM emp
WHERE ename = l_ename;
dbms_output.put_line(l_empno);
END;
/
- 강좌 URL : http://www.gurubee.net/lecture/4333
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.