💡부서 번호 물어보고, 해당 부서 사원 이름, 월급, 부서 번호 출력하기
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;
/
'🛠️Skill > SQL' 카테고리의 다른 글
[SQL문법] 날짜, 시간 더하기 (DATE_ADD, DATE_SUB) (0) | 2022.12.09 |
---|---|
[SQL 문법] SUBSTR 특정 문자 추출 , LENGTH / CHAR_LENGTH 길이 추출, INSTR 위치 추출 (0) | 2022.12.03 |
[SQL문법] DATEDIFF, TIMESTAMPDIFF (날짜 차이)-MySQL (0) | 2022.11.24 |
[SQL문법] REPLACE 특정 문자 변경 (0) | 2022.11.17 |
[SQL문법] CONCAT 함수, || 연산자 (문자열 연결, 합치기) (0) | 2022.11.17 |
댓글