728x90
반응형
SMALL

* 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문을 실행해야 하는 것이다.

 

감사합니다.

728x90
반응형
LIST