PL/SQL : SQL의 확장된 개념, 절차적 프로그래밍 언어
PL/SQL은 블록 구조를 가지고 있다.
선언부 / 실행부 / 예외처리부 / END로 나누어 볼 수 있는데, 먼저 실행부에서 쓸 수 있는 반복문에 대해 알아보자.
반복문에는 loop
, while
, for
세 종류가 있다.
- loop 반복문
loop
plsql 문장 + 조건식 업데이트 문장;
exit 조건;
end loop;
- while 반복문
while 조건식 loop
plsql 문장;
end loop;
- for 반복문
for 변수 in [reverse] start ..end loop
plsql문장;
end loop;
loop
를 사용하여 1~5까지 숫자를 순서대로 출력하는 코드를 작성해보자.
DECLARE
num number(2) := 1;
BEGIN
LOOP
dbms_output.put_line(num);
num := num+1; -- 1씩 증가
exit when num > 5; -- 5가 되면 종료
end loop;
END;
//출력 : 1,2,3,4,5
while
을 사용하여 1~5까지 숫자를 순서대로 출력하는 코드를 작성해보자.
DECLARE
num number(2) := 1;
BEGIN
WHILE num <= 5 LOOP -- 조건식
dbms_output.put_line(num);
num := num + 1; -- 증감식
end LOOP;
END;
//출력 : 1,2,3,4,5
for
을 사용하여 1~5까지 숫자를 순서대로 출력하는 코드를 작성해보자.
for 반복문은 reverse
를 이용하여 오름차순, 내림차순으로 출력이 가능하다.
-- 오름차순
DECLARE
BEGIN
FOR num IN 1..5 LOOP
dbms_output.put_line(num);
end LOOP;
END;
//출력 : 1,2,3,4,5
-- 내림차순
DECLARE
BEGIN
FOR num IN reverse 1..5 LOOP
dbms_output.put_line(num);
end LOOP;
END;
//출력: 5,4,3,2,1
반복문을 응용하여 emp table에 있는 직원의 사원 번호를 입력 받으면, 해당 사원의 이름 글자 수 만큼 * 을 출력하는 로직을 구현해보자.
ex ) 7369 ( SMITH ) 입력 -> *****
DECLARE
newempno emp.empno%TYPE := &n;
newename emp.ename%TYPE;
enamelen Number(10);
star varchar(10);
BEGIN
SELECT ename, length(ename)
INTO newename, enamelen
FROM EMP
WHERE empno = newempno;
FOR i IN 1..enamelen LOOP
star := star || '*';
end LOOP;
dbms_output.put_line(newename || '의 글자 길이 : ' || star);
END;
DBeaver에서 &n
을 실행하려면 :n
으로 바꾸면 실행이 가능하다.
sqlplus에서 실행하여 SMITH의 사원 번호인 7369를 입력하면 * 5개가 출력되는 것을 확인할 수 있다.
DBeaver에서 실행하려 하면 계속 에러가 떠서 해결 방법을 찾아봐야 할 것 같다😥