9일차

고규빈·2021년 12월 23일
0

PL/SQL

  • Procedural Language/Structured Query Language의 줄임말로 데이터베이
    스 응용 프로그램을 작성하는 데 사용하는 오라클의 SQL 전용 언어.
  • SQL 문에 변수, 제어, 입출력 등의 프로그래밍 기능을 추가하여 SQL 만으
    로 처리하기 복잡한 문제를 해결하는 용도로 사용
  • SQL 언어는 비절차 언어이기 때문에 쿼리문들간에 연결점이 없다. PL/SQL
    을 사용하여 연결점을 만들어 프로그램으로 동작하게 하는 언어이다.

PL/SQL Block의 종류

1) 익명 블록 : 이름이 없는 PL/SQL 블록을 말한다.
2) 이름 있는 블록

  • 프로시저 : 이름이 있는 PL/SQL 블록
  • 트리거 : 이벤트가 발생하면 자동으로 실행되는 PL/SQL 블록
  • 함수 : 반환값이 존재하는 PL/SQL 블록
  • 패키지 : 하나 이상의 프로시저, 함수 등의 묶음

선언부

: DECLARE로 시작. 실행부와 예외 처리부에서 사용할 각종 변수, 상수, 커서 등을 선언. 변수 선언과 각 문장의 끝에 반드시 세미콜론(;)을 찍어야한다.

실행부

: 실제 로직을 처리하는 부분 각종 문장(일반 SQL문, 조건문, 반복문 등)이 온다. DML 문만 사용가능

예외 처리부

: EXCEPTION 절로 시작. 실행부에서 로직 처리 중 오류 발생시 처리할 내용 기술 생략 가능

IF 조건문

DECLARE
선언부
BEGIN
IF 조건식 THEN
수행 명령어;
ELSIF 조건식 THEN
수행 명령어;
ELSIF 조건식 THEN
수행 명렁어; …
ELSE
수행 명령어;
END IF;
END;
/

저장 프로시저

PL/SQL 을 주기적으로 사용해야 할 때 이름을 줘서 오라클에 저장 해 두는
PL/SQL 프로그램


트리거

트리거(TRIGGER)란 특정 상황이나 동작에 의해 이벤트가 발생할 경우 자동으로 실행되는 PL/SQL을 말한다.

CREATE [OR REPLACE] TRIGGER 트리거 이름
BEFORE | AFTER
INSERT OR UPDATE OR DELETE ON 테이블명
BEGIN
실행부
END;

LOOP

반복문

  • loop문 : 실행문을 반복하다 조건식이 만족되면 LOOP문을 종료하고 빠져나옴
    LOOP
    실행문
    EXIT WHER 조건식


    IF 조건식 THEN
    EXIT
    END IF;


    END LOOP;

  • for loop문

    반복의 횟수가 결정되어 있는 LOOP문

    FOR 변수(index) IN 최소값..최대값
    LOOP
    실행문
    END LOOP;

  • while loop문

    처음부터 조건식이 존재하는 LOOP문
    a := 1
    WHILE 조건식 -- a < 10
    LOOP
    실행문
    a := a+1;
    END LOOP;

LOOP 연습

DECLARE
i number := 1;

BEGIN
LOOP
i := i+1;
dbms_output.put_line('반복문 출력');
EXIT WHEN i > 10;
END LOOP;
END;
/

BEGIN
FOR i IN 1..10
LOOP
dbms_output.put_line(i);
END LOOP;
END;
/

DECLARE
v_sum number := 0;
i number := 1;
BEGIN
WHILE i <= 100
LOOP
v_sum := v_sum + i;
i := i+1;

 EXIT WHEN i = 11;
 END LOOP;
dbms_output.put_line('합계 : '||v_sum);
 

END;
/

-- 1~100의 합계를 구하는데 10, 20의 숫자를 제외한 합계를 구하시오.

DECLARE
v_sum number := 0;
i number := 1;
BEGIN
WHILE i <= 100
LOOP
v_sum := v_sum + i;
i := i+1;
IF i = 10 THEN
v_sum := v_sum - 10;
ELSIF i = 20 THEN
v_sum := v_sum - 20;

END IF;

END LOOP;

 dbms_output.put_line('합계 : '||v_sum);

END;

/

DECLARE
v_sum number := 0;
--i number := 1;

BEGIN
FOR i IN 1..100
LOOP
IF i = 10 THEN
dbms_output.put_line('');
ELSIF i = 20 THEN
dbms_output.put_line('');
ELSE
v_sum := v_sum + i;

   END IF;
  
  
  
  
  /* 
   IF i = 10  THEN 
   v_sum := v_sum - 10;
ELSIF i = 20 THEN 
   v_sum := v_sum - i;
END IF;
*/

END LOOP;

dbms_output.put_line('합계 : '||v_sum);

END;
/

BEGIN
FOR row IN (select * from book)
LOOP
dbms_output.put_line(row.bookid||' | '||row.bookname||' | '||row.publisher ||' | '|| row.price);
END LOOP;

END;

profile
안녕하세요

0개의 댓글