일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 책 원씽
- dom sax 차이점
- xml 파싱 방법
- Notepad++ 줄바꿈
- 노트패드++ 줄바꿈
- ajax 비동기식
- 빅분기 독학
- 동기식 비동기식
- 간단한 채팅 프로그램
- The OneThing
- 자바 채팅
- async false
- 빅분기
- async
- 빅데이터분석기사 필기
- 빅데이터분석기사 독학
- 자바 채팅 프로그램
- 노트패드 줄바꿈
- Notepad 줄바꿈
- 원씽 독후감
- 원씽 책
- ajax 동기식
- 빅데이터분석기사
- TCP Socket
- 자바스크립트 undefined
- 원씽 내용
- TCP 채팅
- dom sax 장단점
- 빅분기 필기
- 원씽 후기
- Today
- Total
SooBlending
[Oracle] PL/SQL 커서 (Cursor) 본문
<커서> Cursor
- select의 결과가 2개행 이상일 때 명시적으로 사용.
형식)
declare
-- 변수선언, 커서정의
CURSOR 커서명 IS select문장;
begin
OPEN 커서명;
FETCH 커서명 INTO 변수명; -- 데이터 1행 인출
CLOSE 커서명;
end;
/
-------------------------------------------------
declare
-- 변수선언, 커서선언(정의)
CURSOR cur is select deptno, dname, loc from dept;
vdept dept%rowtype; -- vdept타입으로 deptno,dname,loc컬럼을 참조하겠다!!
-- vdept는 dept와 같다!!
begin
OPEN cur;
dbms_output.put_line('부서번호/부서명/부서위치');
dbms_output.put_line('===============================');
loop
FETCH cur into vdept; -- deptno, dname, loc
exit when cur%notfound; -- 커서를 통해 인출된 행이 없다면
dbms_output.put_line(vdept.deptno ||' / '||
vdept.dname || ' / '|| vdept.loc);
end loop;
CLOSE cur;
end;
/
-----------------------------------------------------------------
문제) 특정 부서에 있는 사원의 사원번호, 사원명, 급여, 입사일을 출력하시는 프로시저를 작성하시오.
----> 프로시저명: dept_member
create or replace procedure dept_member(vdeptno emp.deptno%type)
is
-- 변수선언, 커서선언
CURSOR cur
is
select empno, ename, sal, to_char(hiredate,'yyyy-mm-dd') hiredate
from emp
where deptno=vdeptno;
cnt number := 0;
su number;
begin
dbms_output.put_line('=========<'||vdeptno||'번부서>==========');
dbms_output.put_line('사원번호/사원명/급여/입사입');
dbms_output.put_line('----------------------------------');
--커서에 for문을 적용 : open,close 생략하는 것이 가능
--for 변수명 in 최소값..최대값
--for i in 1..6
for vemp in cur -- 자동 open, fetch, close
-- vemp: 결과 한 행을 저장하는 변수
loop
dbms_output.put_line(vemp.empno || '/'|| vemp.ename|| '/'||
vemp.sal ||'/'|| vemp.hiredate);
cnt := cnt+1;
end loop;
dbms_output.put_line('---------------- 사원수: '||cnt||'명');
select count(*) into su
from emp
where deptno=vdeptno;
dbms_output.put_line('---------------- 사원수: '||su||'명');
end;
/
'Programming > DataBase' 카테고리의 다른 글
[Oracle] PL/SQL 트리거(Trigger) (0) | 2017.11.13 |
---|---|
[Oracle] PL/SQL 패키지(Package) (0) | 2017.11.13 |
[Oracle] PL/SQL 프로시저/함수 (Procedure/Function) (0) | 2017.11.10 |
[Oracle] PL/SQL 반복문 (Loop) (for/while) (0) | 2017.11.10 |
[Oracle] PL/SQL (0) | 2017.11.09 |