* Youtube Link - https://www.youtube.com/watch?v=kNf-UnP0gAM&list=PLVsNizTWUw7FzFgU1qe-n7_M7eMFA9d-f&index=18
7.3 PL/SQL 프로그래밍
DECLARE 명령문으로 변수를 선언하고
BEGIN과 END 사이에 프로그래밍한다.
7.3.1 IF...ELSE...
SET SERVEROUTPUT ON;
- SERVEROUTPUT 변수 ON으로 설정
DBMS_OUTPUT.PUT_LINE('100입니다.');
- 화면에 출력한다.
IF var1 = 100 THEN
DBMS_OUTPUT.PUT_LINE('100입니다.');
ELSE
DBMS_OUTPUT.PUT_LINE('100이 아닙니다.');
END IF;
- IF문을 통해서 프로그래밍을 한다.
SELECT hire_date INTO hireDate;
- 조회된 값 hire_date 를 hireDate에 입력한다.
CURRENT_DATE()
- 세션에 저장된 현재 날짜를 조회한다.
CASE
WHEN pNumber >= 90 THEN
credit := 'A';
...
ELSE
pNumber := 'F';
END CASE;
- CASE와 END CASE 사이에 CASE 문이 들어간다.
- WHEN THEN을 통해서 조건식과 조건에 부합하면 실행할 코드가 들어간다.
NULLS LAST 명령문을 통해서
총구매액이 null인 값들을 맨 아래에서 조회된다.
원래는 null인 값들은 맨 위에서부터 조회된다.
CASE문을 통해서
총 구매액을 구간으로 회원등급을 나누어서 회원들을 조회하였다.
총 구매액이 NULL인 유령고객들은 맨 아래에 조회되도록 하였다.
WHILE 문
WHILE (조건문)
- 조건이 TRUE인 동안 반복문이 실행된다.
LOOP
END LOOP;
- LOOP 문 안에 코드들이 반복되어서 실행된다.
FOR 문
FOR iNum IN 1 .. 100
- 1에서 100까지 계속 반복된다.
- 1을 iNum에 넣고 돌고, 2를 iNum에 넣고 돌고를 100까지 계속 반복한다.
7의 배수는 건너 뛰고 합을 구한다.
MOD는 나누기의 나머지를 구하는 함수이다.
IF MOD(iNum, 7) = 0
iNum을 7로 나눈 값의 나머지를 구하는 함수이다.
CONTINUE는 다음 반복으로 넘어간다.
EXIT은 반복문을 탈출한다.
GOTO my_goto_location;
- <<my_goto_location>> 으로 이동한다. EXIT과 똑같은 역할을 하고 있다.
DBMS_LOCK.SLEEP(5);
DB가 5초간 멈춘후 실행된다.
7.3.6 예외 처리
DECLARE
-- 테이블 열의 데이터 타입과 동일하게 변수 타입을 설정
v_userName userTBL.userName%TYPE;
- userTBL 테이블의 userName 컬럼의 타입을 v_userName의 타입으로 지정한다.
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTOUT.PUT_LINE('김씨 고객이 없습니다.');
WHEN TOO_MANY_ROWS THEN
DBMS.OUTPUT.PUT_LINE('김씨 고객이 너무 많네요.');
- EXCEPTION 처리를 한다.
사용자 정의 예외 처리
userException EXCEPTION;
PRAGMA EXCEPTION_INIT(userException, -1422);
- EXCEPTION을 정의하였다. -1422는 TOO_MANY_ROWS 예외이다.
하지만 이러한 경우는 예외를 만들어서 자주 사용하지는 않는다.
1) IF SQL%NOTFOUND THEN
- SQL이 하나도 조회되지 않았을 때이다. 이러한 경우 zeroDelete 예외를 발생시키는 로직이다.
2) RAISE zeroDelete;
zeroDelete 예외를 발생시키는 것이다.
그리고
3) EXCEPTION WHEN THEN 구문
을 통해서 zeroDelete 예외를 처리한다.
RAISE_APPLICATION_ERROR(-20001, '데이터 없음 오류 발생!!');
- 마치 오라클 예외인 것 처럼 처리할 수 있다.
동적 SQL문 처리
EXECUTE IMMEDIATE v_sql INTO v_height;
- v_sql의 변수 값인 문자열로된 sql문을 실행한다. 동적 SQL문을 위해서 사용한다.
연/월/일을 찾아와서
연/월/일을 테이블명으로 생성하고 싶다.
그러면 동적 SQL문을 실행해야 하는 것이다.
감사합니다.
'Oracle' 카테고리의 다른 글
[이것이 오라클이다] 08장 2교시: [Oracle] 제약 조건 (2) | 2024.11.05 |
---|---|
[이것이 오라클이다] 08장 1교시: [Oracle] 테이블 생성 (SQL Developer 및 SQL문) (3) | 2024.11.05 |
[이것이 오라클이다] [Oracle] 조인(내부조인,외부조인,상호조인 등) (0) | 2024.11.04 |
[이것이 오라클이다] 07장 1교시: [Oracle] 데이터 형식, 변수, 형 변환 (2) | 2024.11.04 |
[이것이 오라클이다] [Oracle] WITH절, INSERT, UPDATE, DELETE, MERGE (3) | 2024.11.03 |