본문 바로가기
🛠️Skill/SQL

[PL/SQL] Cursor/Loop/For Loop문 - 부서 번호 물어보기

by Istj_eff 2022. 11. 29.
💡부서 번호 물어보고, 해당 부서 사원 이름, 월급, 부서 번호 출력하기

1. Cursor / Loop문

  • Cursor문 사용 : cursor는 PS/SQL에서 처리할 데이터를 저장할 메모리 영역이다.
  • Loop문 사용 : exit안하면 무한반복 주의!!
declare
	v_ename emp.ename%type;
	v_sal   emp.sal%type;
	v_deptno emp.deptno%type;

	cursor emp_cursor is -- 메모리 이름을 emp_cursor로 지정
		select ename, sal, deptno
		from emp
		where deptno = &p_deptno; -- p_deptno로 입력받은 부서번호 사원들 이름,월급,부서번호를 메모리에 올림 

begin
	open emp_cursor; -- open으로 emp_cursor 메모리 열기
		loop
			fetch emp_cursor into v_ename, v_sal, v_deptno; -- emp_cursor데이터를 첫 행부터 v_ename, v_sal, v_deptno에 담기
			exit when emp_cursor%notfound; -- emp_cursor에서 더이상 데이터가 안찾아지면 loop종료
			dbms_output.put_line(v_ename || ' ' || v_sal || ' ' || v_deptno); -- 출력
		end loop;
	close emp_cursor; -- emp_cursor 메모리 닫기
end;
/

 

2. Cursor / For Loop 문

  • Cursor문 사용 : cursor는 PS/SQL에서 처리할 데이터를 저장할 메모리 영역이다.
  • for loop문 사용 : loop문과 달리 exit명령어가 필요없다.

cursor를 열고 닫는 open, close명령어가 없어서 더 간단하다.

accept p_deptno prompt '부서 번호를 입력하세요'
declare
	cursor emp_cursor is
		select ename, sal, deptno
		from emp
		where deptno = &p_deptno;

begin
	for emp_record in emp_cursor loop -- emp_cursor데이터를 첫행부터 emp_record에 넣기 (컬럼 동일)
		  dbms_output.put_line(emp_record.ename ||' '|| emp_record.sal ||' '|| emp_record.deptno);
	end loop;
end;
/

 

2-1. 더 간단하게 for loop문 작성해보기 (delcare절 제외)

accept p_deptno prompt '부서 번호를 입력하세요'
begin
	for emp_record in (select ename, sal, deptno
											from emp
											where deptno = &p_deptno) loop

		dbms_output.put_line(emp_record.ename ||' '||
												 emp_record.sal ||' '||
												 emp_record.deptno);
	end loop;
end;
/

 

 

 

 

댓글