KH

230317 (PL_SQL)

十月 2023. 3. 17. 17:19

〈 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 출력해보기

END; 다음에 / 를 꼭 적어주어야 한다.

≫ 화면에 출력되도록 설정하고 나니 HELLO WORLD가 정상적으로 출력됨

 

 

📝 

{"originWidth":494,"originHeight":295,"style":"alignLeft","caption":"



빨강, 검정 / 주황, 분홍 → 변수로써 사용

노랑, 파랑, 갈색 / 초록, 보라 → 변수에 넣을 컬럼

 


✔ 사용자에게 입력받으려면?

'&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으로 나눌 때