Salted Caramel

[수업 24일차] 21.09.07 SQL DataBase 4 , PL/SQL 본문

coding/[2021.08.02~2022.01.24] 수업복습

[수업 24일차] 21.09.07 SQL DataBase 4 , PL/SQL

꽃무늬라떼 2021. 9. 8. 08:42

PL/SQL (Procedual Language / SQL)


SQL 만으로는 구현이 어렵거나 구현 불가능한 작업을 수행하기 위해 

오라클에서 제공하는 프로그램 언어를 말함.

일반 프로그래밍 언어적인 요소들을 다 가지고 있으며, 데이터베이스 업무를

처리하기 위한 최적화된 언어

변수, 조건 처리, 반복 처리 등 다양한 기능을 사용할 수 있음.

기본 구조

1) 선언부(delclare) : 모든 변수나 상수를 선언하는 부분

2) 실행부(excutable - begin) : - 실제 로직이 실행되는 부분
                               - 제어문(조건문), 반복문등의 로직을 기술하는 부분
                               
3) 예외처리부(exception) : 실행 도중 예외가 발생 시 해결하기 위한 
                          명령들을 기술하는 부분
                          
위 기본 구조 중에서 선언부와 예외처리부는 생략이 가능하지만, 

실행부는 반드시 존재(기술) 해야 함.

PL/SQL 사용 시 주의사항.

1) 기본 구조(declare, begin, exception) 키워드 뒤에는 세미콜론(;)을 붙이지 않는다.

2) 블럭의 각 부분에서 실행해야 하는 문장 끝에는 세미콜론(;)을 붙인다.

3) begin ~ end (실행부) 밑에는 반드시 "/" 를 붙여 주어야 한다.

 

 

형식) 

declare 

begin

end;

/

 


 

PL/SQL을 이용하여 "Hello, PL/SQL !!!"이라는 내용을 화면에 출력해 보자.


-- 화면에 출력 기능을 활성화 시켜주어야 한다.
-- 실행 결과를 화면에 출력하는 기능



set serveroutput on;   -- 실행 결과를 화면에 출력

SP2-0265: serveroutput은 ON 또는 OFF로 설정되어야 합니다.
라는 문구가 나오고 실행 시키고자하는 내용을 작성해 줘야한다. 

 


begin 
    dbms_output.put_line('Hello, PL/SQL !!!');
end;
/

 

 

Hello, PL/SQL !!!

PL/SQL 프로시저가 성공적으로 완료되었습니다.

 

==> 이때 원하는 문구가 출력이 잘되지 않은 경우

on으로 설정이 잘되지 않은 것으로 옆에 주석문 같은게 있으면 안된다. 


-- 선언부(declare) 영역에 변수를 선언하는 방법


-- 1) 스칼라 자료형 - 형식) 변수명 자료형(크기)

--    예) num number(3);   / name varchar2(20);

 


-- 2) 레퍼런스 자료형 - 형식) 변수명 테이블명.컬럼명%type;
-- 테이블에 정의된 컬럼의 자료형과 크기를 모두 파악하고 있다면 별 문제가 
-- 없겠지만, 대부분은 그렇지 못하기 때문에 오라클에서는 레퍼런스(reference)
-- 변수를 제공해 주고 있음.

-- 예) num emp.empno%type;

 

-- 3) rowtype

-- 테이블의 모든 컬럼을 한꺼번에 저장하기 위한 변수로 선언하는 방법.

 


-- 조건 제어문



-- 특장 조건식을 통해 상황에 따라 실행할 내용을 달리하는 방식의 명령어를 말함.

/* 1. if 조건문
   
  1) if ~then : 특정 조건을 만족하는 경우에 작업을 수행.
       
        형식) if 조건식 then
                 조건식이 참인 경우 실행 문장;
                    end if
  
  2) if ~ then~ else : 특정 조건을 만족하는 경우와 만족하지 않는 경우에
                      각자 지정한 작업을 수행.
        형식) if 조건식 then
                조건식이 참인 경우 실행 문장;
              else
                조건식이 거짓인 경우 실행 문장;
              end if
  3) if~ then~elsif : 여러 조건에 따라 각자 지정한 작업을 수행.
        형식) if 조건식1 then
                  조건식1이 참인 경우 실행 문장;
             elsif 조건식2 then
                  조건식1이 거짓이고, 조건식2가 참인 경우 실행 문장;
             elsif 조건식3 then
                  조건식1, 조건식2가 거짓이고, 조건식3가 참인 경우 실행 문장;
             else
                 조건식1,조건식2,조건식3이 모두 거짓인 경우 실행 문장;
            end if

 

 

 

  v_avg number(5,2) :=89.12;

 

 := 대입연산자

 

 


2. case 조건문


    형식)
          case 비교 기준
              when 값1 then
                   값1 일때 수행할 문장;
              when 값2 then
                   값2일때 수핼할 문장;
              when 값3 then
                   값3 일때 수행할 문장;
              else
                   값1, 값2, 값3이 아닌 다른 값일 경우 수행할 문장.
            end case;
*/

 

 

 

-- 2) 검색 case 예제

    형식)
          case 
              when 조건식1 then
                   조건식1 일때 수행할 문장;
              when 조건식2 then
                   조건식2일때 수핼할 문장;
              when 조건식3 then
                   조건식3 일때 수행할 문장;
              else
                   조건식1 조건식2, 조건식3이 아닌 다른 값일 경우 수행할 문장.
    end case;

 


반복 제어문


특정 작업을 반복하여 수행하고자 할 때 사용하는 문장.

반복 제어문의 종류

1) 기본 loop  : 기본 반복문
 
2) while loop : 특정 조건의 결과를 통해서 반복을 수행.

3) for loop : 반복 횟수를 정하여 반복 수행.

반복문의 반복 수행을 종료시키는 명령어.

1) exit : 수행중인 반복을 종료시키는 명령어.

2) exit-when : 반복 종료를 위한 조건식을 지정하고 만족하면 반복 종료.

3) continue : 수행중인 반복의 현재 주기를 건너 뜀.

4) continue-when : 특정 조건을 지정하고 조건식을 만족하면 반복 주기를 건너뜀.

 


 데이터 정의어(DDL :Data definition Language)


  
  - 데이터 관리 및 보관을 위해 다양한 객체를 제공하는데 이러한 객체를
  
  새로 만들거나 기존에 존재하던 객체를 변경하거나 삭제하는 등의 기능을
  
  수행하는 명령어를 말함.
  
  - 데이터 정의어를 사용 시 주의사항. 
  
  * 데이터 정의어를 실행하면 자동으로 commit이 됨.
   
   따라서 rollback을 통한 취소는 불가능함.
   
   데이터 정의어의 종류
   
   1) create : 객체를 생성하는 명령어.
               예) 테입블 생성, 시퀀스 생성, view 생성.
   
   2) alter : 객체를 수정하는 명령어.
              예) 테이블의 컬럼 추가, 수정, 삭제
              
   3) drop : 객체를 삭제하는 명령어.
            예) 테이블을 삭제하는 명령어. 

 

 

 

  -- test 테이블을 삭제해 보자.
  -- 형식) drop 테이블 이름 purge;

 

  -- rename : 테이블의 이름을 변경하고 싶을 때 사용하는 명령어
  
  -- 형식) rename 기존 테이블이름 to 새로운 테이블이름

 

 -- truncate : 테이블의 데이터를 삭제하는 명령어
  
  -- 형식 ) truncate table 테이블이름