230317 (PL_SQL)
〈 PL_SQL 〉
Procedural Language extension to SQL
:: SQL문장 내에서 변수 정의, 조건 처리, 반복 처리 등을 지원하는
오라클 자체에 내장되어 있는 절차적 언어
✔ PL/SQL 구조
선언부(DECLARE SECTION) : DECLARE ≫ 변수/상수 선언
실행부(EXECUTABLE SECTION) : BEGIN ≫ 제어문, 반복문 등 로직 기술
예외처리부(EXCEPTION SECTION) : EXCEPTION ≫ 예외 상황 발생 시 해결 문장 기술
PL/SQL블록 내에서는 한문장을 종료할 때마다
세미콜론(;)을 사용하여 한문장이 끝났다는것을 명시
DECLARE (옵션)
BEGIN (필수)
EXCEPTION (옵션)
END (필수)
📝 HELLO WORLD 출력해보기
≫ 화면에 출력되도록 설정하고 나니 HELLO WORLD가 정상적으로 출력됨
📝
빨강, 검정 / 주황, 분홍 → 변수로써 사용
노랑, 파랑, 갈색 / 초록, 보라 → 변수에 넣을 컬럼
✔ 사용자에게 입력받으려면?
'&ID'
& 뒤에 있는 것이 팝업 창에 올라감
ex) &사번 → 사번에 대한 값 입력
🎲
레퍼런스 변수로 EMP_ID, EMP_NAME, DEPT_CODE, JOB_CODE, SALARY를 선언하고
EMPLOYEE테이블에서 사번, 이름, 직급코드, 부서코드, 급여를 조회한 후
선언한 레퍼런스 변수에 담아 출력하시오 (단, 입력받은 이름과 일치하는 조건의 직원 조회)
그런데,
지금 EMPLOYEE에서 컬럼을 많이 가져오는데 비효율적임
▼
✔ 그럴 때는 %ROWTYPE 사용!
≫ 행 자체를 다 참조하겠다는 뜻
✔ IF~THEN~END IF (단일 IF문)
🎲
EMP_ID를 입력받아 해당 사원의 사번, 이름, 급여, 보너스율 출력
보너스를 받지 않은 사원은 보너스율 출력 전 '보너스를 지급받지 않는 사원입니다' 출력
✔ IF~ELSE
🎲
EMP_ID를 입력받아 해당 사원의 사번, 이름, 부서명, 소속 출력
TEAM 변수를 만들어 소속이 KO면 국내팀, 아니면 해외팀 저장
✔ IF~ELSE IF~ELSE
🎲
점수를 입력받아 SCORE변수에 저장하고
90점 이상은 A, 80점 이상은 B, 70점 이상은 C
60점 이상은 D, 60점 미만은 F로 조건처리하여 GRADE변수에 저장
EX. 당신의 점수는 XX점이고 학점은 X학점입니다.
ELSIF 는 ELSE IF!
▼ CASE문으로 바꿔서 쓸 수도 있다
✔ BASIC LOOP
✔ WHILE LOOP
✔ FOR LOOP
≫ 5부터 1까지 하고 싶다면 아래 구문의 REVERSE 사용
*미리 정의된 예외 종류
① NO_DATA_FOUND : SELECT문이 아무런 데이터 행을 반환하지 못했을 때
② DUP_VAL_ON_INDEX : UNIQUE제약조건을 갖는 컬럼에 중복되는 데이터가 들어갈 때
③ ZERO_DIVIDE : 0으로 나눌 때