다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

Slides:



Advertisements
Similar presentations
오라클 백업과 복구.
Advertisements

PowerBuilder Stored Procedure DW
Nested Queries CSED421: Database Systems Labs.
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
Perfect! 대용량 데이터베이스 튜닝Ⅱ.
You YOungseok 데이터베이스 테이블 및 인덱스 You YOungseok.
PL/SQL.
Database Laboratory, Hong Ik University
Proc*C 기초 Style System 김도형.
오라클 데이터베이스 성능 튜닝.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
오라클사에서 SQL 언어에 절차적인 프로그래밍 언어를 가미해 만든 것이 PL/SQL에 대해서 학습하겠습니다.
데이터 베이스 설계 및 실습 #1 - 오라클 설치 및 SQL 기본.
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
JSP Programming with a Workbook
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
8장 서브 쿼리.
12장 데이터 읽기 일관성과 락.
MySQL 및 Workbench 설치 데이터 베이스.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
SQL*PLUS.
PL/SQL 문법 부 프로그램 (프로시저, 함수) 패키지&트리거
3장. 데이터베이스 구축의 전체 과정 미리 실습하기
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
5장 Mysql 데이터베이스 한빛미디어(주).
Chapter 05 데이터베이스 프로그래밍.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
6장 그룹 함수.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
이번 장에서는 패키지와 트리거에 대해서 학습하겠습니다.
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
SELECT empno, ename, job, sal, dname FROM emp, dept
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
5장 Mysql 데이터베이스 한빛미디어(주).
KIM HEESANG PL/SQL 2 KIM HEESANG
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
You YoungSEok Oracle 설치 You YoungSEok
웹 어플리케이션 보안 2016년 2학기 3. Mongo db.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
환경 설정 예제 데이터베이스 생성 - 그림 3.34의 SQL Server 관리 스튜디오 창의 왼쪽 영역의 데이터베
JDBC Lecture 004 By MINIO.
㈜시스원이 제공하는 시스템 관리 통합 솔루션 SysmanagerOne Agent설치 안내서
메모리 관리 & 동적 할당.
데이터베이스 (Database) SQL 추가 기능: 주장, 뷰, 프로그래밍 기법 문양세 강원대학교 IT대학 컴퓨터과학전공.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
ADO.NET (SqlConnection, SqlCommand)
오라클 쿼리 문제 EMP (사원 테이블) DEPT (부서 테이블) 컬럼명 설명 EMPNO 사원번호 ENAME 사원명 JOB
기본적인 SELECT문 작성.
Canary value 스택 가드(Stack Guard).
문성우 SQL 실습 Part Ⅰ 문성우.
10 데이터 조작어 데이터 조작어 데이터 입력 데이터 수정 데이터 삭제 MERGE 트랜잭션 관리 시퀀스.
10 데이터 조작어 데이터 조작어 데이터 입력 데이터 수정 데이터 삭제 MERGE 트랜잭션 관리 시퀀스.
제 18 장 (Oracle) 오라클에서 트랜잭션 지원
14 뷰(View) 뷰의 개념 뷰 관리.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
maria db JDBC PROGRAMMING 5
10주 MariaDB에서 트랜잭션 지원 및 동시성 제어 기능
14 뷰(View) 뷰의 개념 뷰 관리.
 6장. SQL 쿼리.
7 생성자 함수.
Ⅰ. 데이터베이스 정의 Ⅱ. MS SQL 서버 Ⅲ. 데이터베이스 인터페이스
Presentation transcript:

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL 서진수 저

17장 PL/SQL CURSOR 1

17. PL/SQL CURSOR 1. SQL 커서란? 오라클 서버에서는 SQL 문을 실행할 때마다 처리(Parse, Execution)를 위한 메모리공간 (이 공간을 이후부터 SQL 커서라고 부르겠습니다)을 사용합니다. 즉 사용자가 요청하는 데이터를 데이터베이스 버퍼 캐쉬에서 커서로 복사 해 온 후 커서에서 원하는 데이터를 추출하여(Fetch) 후속 작업을 하게 된다는 뜻입니다. 이 메모리 공간을 Private SQL Area 라고도 부르며, 오라클의 서버 프로세스 구성이 Dedicated Server 환경이냐 또는 MTS(Multi-Threaded Server)환경이냐에 따라 서버 내에 위치되는 곳이 다릅니다. SQL 커서는 크게 묵시적 커서(Implicit Cursor)와 명시적 커서(Explicit Cursor)로 나눌 수 있습니다 2

17. PL/SQL CURSOR 2. 묵시적 커서(Implicit Cursor) 생성 유무를 알 수 없습니다. - 묵시적 커서에 저장되는 데이터는 1 행만 가능합니다 묵시적 커서 속성(Cursor Attribute) SQL%ROWCOUNT - SQL%FOUND SQL%NOTFOUND SQL%ISOPEN 3

17. PL/SQL CURSOR 3. 명시적 커서(Explicit Cursor) 명시적 커서 속성(Cursor Attribute) 커서이름%ROWCOUNT 커서이름%FOUND 커서이름%NOTFOUND 커서이름%ISOPEN 4

17. PL/SQL CURSOR 4. 명시적 커서(Explicit Cursor) 처리 단계 명시적 커서 선언 CURSOR c_name 1 명시적 커서 오픈 OPEN c_name 2 커서에서 데이터 추출 Fetch c_name 3 커서 사용 종료 CLOSE c_name 4 5

1) 명시적 커서 선언(Declaration) 17. PL/SQL CURSOR 1) 명시적 커서 선언(Declaration) CURSOR 커서명 IS 커서에 담고 싶은 내용을 가져오는 서브쿼리 2) 명시적 커서 열기(Open) 커서 선언 시 기술했던 서브쿼리를 수행해서 데이터를 커서로 가져 오는 과정 OPEN 커서 이름 ; 6

17. PL/SQL CURSOR 3) 명시적 커서로부터 데이터 읽어서 변수로 할당하기(Fetch) FETCH 커서_이름 INTO 변수들 ; 4) 명시적 커서 닫기(Close) CLOSE 커서_이름; 7

17. PL/SQL CURSOR SCOTT>declare 명시적 커서 사용 예 2 vempno number(4); 3 vename varchar2(20); 4 vsal number(7); 5 6 cursor c1 is 7 select empno , ename , sal 8 from emp 9 where deptno=20; 10 C1 이라는 이름의 명시적 커서를 선언한 부분. 이 커서가 open 될 때 마치 view처럼 서브쿼리가 수행됩니다 다음 장에 계속…. 8

17. PL/SQL CURSOR 11 begin 12 open c1; 13 14 dbms_output.put_line('번호 이름 급여'); 15 16 loop 17 fetch c1 into vempno , vename , vsal ; 18 exit when c1%notfound; 19 20 dbms_output.put_line(vempno||' '||vename||' '||vsal); 21 end loop; 22 close c1; 23 end; 24 / 커서 open 합니다 커서에 있는 데이터를 Fetch해서 변수로 할당합니다. 커서를 close 합니다 9

17. PL/SQL CURSOR 5. Cursor FOR Loop 문 활용하기 10 FOR record_name IN cursor_name LOOP -- 명시적 커서의 OPEN, FETCH 가 자동적으로 수행됨. statement1 ; statement2 ; .... END LOOP ; -- 루프문을 빠져 나갈 때 자동적으로 커서가 CLOSE 됨. 10

17. PL/SQL CURSOR - CURSOR FOR LOOP 예 1 :   : emp 테이블에서 empno, ename 값을 가져와서 커서에 저장 후 출력하세요. SCOTT>DECLARE 2 CURSOR emp_cur IS -- 커서 선언됩니다 3 SELECT empno ,ename 4 FROM emp; 5 BEGIN 6 FOR emp_rec IN emp_cur -- 커서의 데이터를 저장할 emp_rec 변수 선언됨 7 LOOP 8 DBMS_OUTPUT.PUT_LINE(emp_rec.empno||' '||emp_rec.ename); 9 END LOOP; 10 END; 11 / 11

17. PL/SQL CURSOR - CURSOR FOR LOOP 예 2 : 아래 예는 사용자가 직접 vemp 라는 emp%ROWTYPE 변수를 선언하고 FOR 문장에서 사용하는 예입니다. SCOTT>DECLARE 2 vemp emp%ROWTYPE; 3 4 CURSOR c1 IS 5 SELECT empno,ename,sal 6 FROM emp ; 7 8 BEGIN 9 FOR vemp IN c1 LOOP 10 EXIT WHEN c1%NOTFOUND ; 11 DBMS_OUTPUT.PUT_LINE(vemp.empno||' '||vemp.ename||' '||vemp.sal); 12 END LOOP; 13 END ; 14 / 12

17. PL/SQL CURSOR - CURSOR FOR LOOP 예 3 :   이번 예는 Sub query 를 사용하여 작업을 하는 예 입니다. 이 방법은 DECLARE 부분에 커서를 선언 할 필요가 없습니다. 대신 커서에 들어가는 서브쿼리 부분을 IN 뒷부분에 바로 사용하는 방법입니다. SCOTT>DECLARE 2 BEGIN 3 FOR emp_rec IN (SELECT empno, ename, sal 4 FROM emp) 5 LOOP 6 DBMS_OUTPUT.PUT_LINE(emp_rec.empno||' '||emp_rec.ename||' '||emp_rec.sal); 7 END LOOP; 8 END ; 9 / 13

17. PL/SQL CURSOR 6. 파라미터 Explicit Cursor 14 SCOTT> DECLARE 2 CURSOR emp_cur (p_dno emp.deptno%type)) 3 IS 4 SELECT EMPNO, ENAME, SAL 5 FROM EMP 6 WHERE DEPTNO = p_dno; 7 .... 8 BEGIN 9 .... 10 OPEN emp_cur(20) ; 11 .... 12 CLOSE emp_cur ; 13 OPEN emp_cur(30) ; 14 .... 15 CLOSE emp_cur ; 16 .... 17 END; CURSOR cursor_name [ (parameter_name datatype, …) ] IS select-statement ; 14

17. PL/SQL CURSOR 7. Explicit Cursor 와 FOR UPDATE 문장 SELECT ... FROM ... FOR UPDATE [OF column_reference][NOWAIT | WAIT n]; - FOR UPDATE 구문 사용 예:   DECLARE CURSOR emp_cur IS SELECT EMPNO, ENAME, SAL FROM EMP WHERE DEPTNO = 20 FOR UPDATE -- 커서 선언시에 FOR UPDATE 로 행을 잠금 NO WAIT ; .... 다음 장에 계속…. 15

17. PL/SQL CURSOR BEGIN .... OPEN emp_cur ; UPDATE emp SET sal = sal * 2 WHERE CURRENT OF emp_cur -- 커서 선언 시에 잠긴 행 갱신함. CLOSE emp_cur ; END; 16

17. PL/SQL CURSOR - SQL CURSOR 연습문제 부서코드를 입력 받아 해당 부서에 속한 사원들을 삭제한 후 삭제된 사원 건수를 출력하세요. (묵시적 커서를 사용하세요) 2. 부서코드를 입력 받아 그 부서에 속한 사원들의 이름, 급여를 출력하세요. (여러 건의 데이터를 작업해야 하므로 명시적 커서와 Basic Loop 문을 사용하세요) 17