2024-11-19









/*
RL/SPL(Procedual Language / SQL)
- SQL 만으로는 구현이 어렵거나 구현 불가능한 작업을 수행하기
위해서 오라클에서 제공하는 프로그래밍 언어를 말함.
- 일반적으로 프로그래밍 언어적인 요소들을 다 가지고 있으며,
데이터베이스 업무를 처리하기 위한 최적화된 언어.
- 변수, 조건 처리, 반복 처리 등 다양한 기능을 사용할 수 있음.
- PL/SQL 애플리케이션 서버 쪽에서 실행되는 것이 아니라,
데이터베이스 엔진 쪽에서 수행이 됨. 따라서 데이터와 가장
가까운 곳에 위치하고 있으므로 애플리케이션 서버로 데이터를
주고 받는데 따르는 네트워크 트래픽이 최소화 된다는 장점이 있음.
- 기본 구조
1) 선언부(declare) : 모든 변수나 상수를 선언하는 부분
2) 실행부(executable - begin)
- 실제 로직이 실행되는 부분.
- 제어문(조건문), 반복문, 함수 정의 등의 로직을 기술하는 부분.
3) 예외처리부(exception)
- 실행 도중 예외가 발생 시 해결하기 위한 명령들을 기술하는 부분.
※ 위 기본 구조 중에서 선언부와 예외처리부는 생략이 가능하지만,
실행부는 반드시 존재해야 함.
- PL/SQL 사용 시 주의사항
1) 기본 구조(declare, begin, exception) 키워드 뒤에는
세미콜론(;)을 붙이지 않는다.
2) 블럭의 각 부분에서 실행해야 하는 문장 끝에는 반드시 세미콜론(;)
을 붙인다.
3) begin ~ end(실행부) 밑에는 반드시 "/"를 붙여 주어야 한다.
*/
-- 화면에 출력 기능을 활성화를 시켜 주어야 한다.
SET SERVEROUTPUT ON;
-- "Hello!! PL/SQL" 이라는 문장을 화면에 출력해보자.
BEGIN
-- 화면(콘솔)에 문장을 출력하는 명령문.
dbms_output.put_line('Hello!! PL/SQL');
END;
/
-- 선언부(declare) 영역에 변수를 선언하는 방법
-- 1) 스칼라 자료형
-- 형식) 변수명 자료형(크기)
-- 예) num number / name varchar2(30);
DECLARE
v_empno NUMBER(4) := 7788;
v_ename VARCHAR2(30);
BEGIN
v_ename := 'ADAMS';
dbms_output.put_line('v_empno >>> ' || v_empno);
dbms_output.put_line('v_ename >>> ' || v_ename);
END;
/
-- 2) 레퍼런스 자료형
-- 형식) 변수명 테이블명.컬럼%type;
-- 예) num emp.empno%type;
DECLARE
e_empno emp.empno%TYPE;
e_ename emp.ename%TYPE;
BEGIN
e_empno := 7900;
e_ename := 'SCOTT';
dbms_output.put_line('e_empno >>> ' || e_empno);
dbms_output.put_line('e_ename >>> ' || e_ename);
END;
/
-- 3) rowtype 자료형
-- 테이블의 모든 컬럼을 한꺼번에 저장하기 위한 변수로 처리하는 방법.
-- 형식) e_row emp%rowtype;
DECLARE
e_row emp%rowtype;
BEGIN
SELECT * INTO e_row
FROM emp
WHERE empno = 7698;
dbms_output.put_line(e_row.empno || ' ' || e_row.ename || ' ' || e_row.job || ' ' ||
e_row.mgr || ' ' || e_row.hiredate || ' ' || e_row.sal || ' ' ||
e_row.comm || ' ' || e_row.deptno);
END;
/
/*
조건문
- 특정 조건식을 통해 상황에 따라 내용을 달리하는 방식의 명령문을 말함.
1. if 조건문
1) if ~ then 조건문
- 특정 조건을 만족하는 경우에만 작업을 수행.
형식)
if 조건식 then
조건식이 참인 경우 실행 문장;
end if;
2) if ~ then ~ else 조건문
- 특정 조건을 만족하는 경우와 만족하지 않는 경우
각자 지정한 작업을 수행
형식)
if 조건식 then
조건식이 참인 경우 실행 문장;
else
조건식이 거짓인 경우 실행 문장;
end if;
3) if ~ then ~ elsif 조건문
- 여러 가지 조건에 따라 각자 지정한 작업을 수행.
- 형식)
if 조건식1 then
조건식1가 참인 경우 실행 문장;
elsif 조건식2
조건식1이 거짓이고, 조건식2가 참인 경우 실행 문장;
elsif 조건식3
조건식1, 2가 거짓이고, 조건식3이 참인 경우 실행 문장;
else
모든 조건식이 거짓인 경우 실행 문장;
end if;
*/
-- 1) if ~ then 조건문
DECLARE
e_number NUMBER := 77;
BEGIN
if e_number >= 50 then
dbms_output.put_line(e_number || ' 은(는) 50보다 큰 수 입니다.');
end if;
END;
/
-- 2) if ~ then ~ else 조건문
-- [문제] 변수에 들어있는 값이 홀수인지, 짝수인지 판별하여 화면에 출력하세요.
DECLARE
e_su NUMBER := 50;
BEGIN
if mod(e_su, 2) = 1 then
dbms_output.put_line(e_su || ' 은(는) 홀수 입니다.');
else
dbms_output.put_line(e_su || ' 은(는) 짝수 입니다.');
end if;
END;
/
-- 3) if ~ then ~ elsif 조건문
DECLARE
e_avg NUMBER(5, 2) := 92.34;
BEGIN
if e_avg >= 90 then
dbms_output.put_line('A학점입니다.');
elsif e_avg >= 80 then
dbms_output.put_line('B학점입니다.');
elsif e_avg >= 70 then
dbms_output.put_line('C학점입니다.');
elsif e_avg >= 60 then
dbms_output.put_line('D학점입니다.');
else
dbms_output.put_line('F학점입니다.');
end if;
END;
/
-- 키보드로 데이터를 입력 받는 방법
-- 형식) &
DECLARE
e_num NUMBER;
BEGIN
e_num := '&num';
dbms_output.put_line('키보드로 입력 받은 데이터 >>> ' || e_num);
END;
/
/*
case 조건문
형식)
case 조건문
when 값1 then
값1일때 수행할 문장;
when 값2 then
값2일때 수행할 문장;
when 값3 then
값3일때 수행할 문장;
else
값1, 2, 3 이 아닌 다른 값일 경우 수행할 문장;
==> java의 default 와 같음
end case;
*/
-- [문제] 키보드로 점수를 입력 받아서 학점을 화면에 출력해 보세요.
-- 단, case 조건문을 이용 할 것.
DECLARE
e_score NUMBER(5, 2);
BEGIN
e_score := '&score';
case trunc(e_score / 10)
when 9 then
dbms_output.put_line('A학점입니다.');
when 8 then
dbms_output.put_line('B학점입니다.');
when 7 then
dbms_output.put_line('C학점입니다.');
when 6 then
dbms_output.put_line('D학점입니다.');
else
dbms_output.put_line('F학점입니다.');
end case;
END;
/
/*
반복문
- 특정 작업을 반복하여 수행하고자 할 때 사용하는 문장.
- 반복문의 종류
1) 기본 loop
- 가장 기본적인 반복문
2) while loop
- 특정 조건의 결과를 통해서 반복을 수행하는 반복문.
3) for loop
- 반복 횟수를 정하여 반복을 수행하는 반복문.
- 반복문의 반복적인 수행을 종료 시키는 명령어
1) exit
- 수행 중인 반복을 종료시키는 명령어.
2) exit ~ then
- 반복 종료를 위한 조건식을 지정하고 만족하면
반복을 종료시키는 명령어.
3) continue
- 수행중인 반복의 현재 주기를 건너뛰는 명령어.
4) continue ~ when
- 특정 조건식을 지정하고 조건식을 만족하면 반복
주기를 건너뛰는 명령어.
*/
-- 기본 loop 반복을 사용해 보자.
DECLARE
e_num NUMBER := 1;
BEGIN
LOOP
dbms_output.put_line('e_num >>> ' || e_num);
e_num := e_num + 1;
if (e_num > 10) THEN
EXIT;
END if;
end loop;
END;
/
-- while loop
DECLARE
e_num NUMBER := 1;
e_sum NUMBER := 0; -- 합을 누적시키는 변수
BEGIN
dbms_output.put_line('*** 1 ~ 100 까지의 합 ***');
while e_num <= 100 loop
e_sum := e_sum + e_num;
e_num := e_num + 1;
end loop;
dbms_output.put_line('1 ~ 100 까지의 합 >>> ' || e_sum);
END;
/
-- for loop
DECLARE
e_tot NUMBER := 0;
BEGIN
dbms_output.put_line('*** for loop를 이용한 1 ~ 100 까지의 합 ***');
for e_su in 1 .. 100 loop
e_tot := e_tot + e_su;
end loop;
dbms_output.put_line('1 ~ 100 까지의 합 >>> ' || e_tot);
END;
/'DB > Oracle SQL' 카테고리의 다른 글
| Oracle SQL_4 (0) | 2024.12.12 |
|---|---|
| Oracle SQL_3 (0) | 2024.12.12 |
| Oracle SQL_2 (0) | 2024.12.12 |
| Oracle SQL_01 (0) | 2024.12.12 |