SooBlending

[Oracle] PL/SQL 본문

Programming/DataBase

[Oracle] PL/SQL

블랜더 2017. 11. 9. 16:53

<PL/SQL>

 - SQL의 장점은 쿼리문 하나로 원하는 데이터를 검색 조작할 수 있다는 점인데,

   SQL문 자체는 비절차적 언어이기 때문에 몇개의 쿼리문 사이에 어떠한 연결    

   및 절차성이 있어야 하는 경우는 사용할 수 없다.

   

 - 이 점을 극복하기 위해 SQL언어에 절차적인 프로그래밍 언어를 가미해 만든   

   것이 PL/SQL


<PL/SQL구조>

     

    DECLARE SECTION (선언부)

      - PL/SQL에서 사용하는 모든 변수나 상수를 선언.

      

    EXECUTABLE SECTION (실행부)

      - 절차적형식으로 SQL을 실행할 수 있도록 절차적요소인 제어문,반복문

        ,함수정의등 로직기술.      

        

    EXCEPTION SECTION (예외처리)

      - 실행 중 발생되는 에러를 해결하기 위한 문장으로 구성.

-------------------------------------------------------

<변수선언>

   변수명 자료형;

   vempno number(4);

   vempno2  emp.empno%type;

            -- emp테이블의 empno컬럼이 갖는 자료형을 참조하겠다.

            

<레퍼런스 변수>

  - %TYPE (한 개의 컬럼), %ROWTYPE (한 행의 모든 컬럼을 참조)            

   

   vemp emp%ROWTYPE;

        ---> emp테이블이 갖는 모든 컬럼의 자료형을 참조하겠다

-------------------------------------------------------

문제) 화면 콘솔에 '안녕, PL/SQL~!!'을 출력하시오.

   declare -- 선언부

     -- (실행부에 필요한) 변수 선언

     

   begin -- 실행부 {

     -- SQL문

     dbms_output.put_line('안녕, PL/SQL~!!');     

   end;  --     }

   /


   ==> 화면 출력 설정 : set SERVEROUT on

                  ----> 기본값: SERVEROUT off


문제) 7788사번을 갖는 사원의 사원번호와 사원명, 급여를 화면에 출력.

   ---> emp_info.sql


------------------------------------------------------

<PL/SQL>

   declare -- 선언부

          실행부에서 사용할 변수선언;

   

   begin  -- 실행부 시작

     SQL문(DQL,DML)

     

     select empno, ename, sal into 변수명1, 변수명2, 변수명3 

     from emp;

     

     insert문, delete문, update문

          조건문, 반복문

          함수호출

   

   end;   -- 실행부 끝

   /


==> if else나 else if도 사용 할 수 있다.. 단, else if => elsif


<조건문>

1. if문

     형식)

       if [(] 조건식 [)]

         then -- {시작

          

                  실행할 문장;

          

       end if; -- }끝


   ----> if_test.sql

   ----> 두 수를 비교해서 크다, 작다를 출력!!


2. if~else문

   형식)

   

     if 조건식

       then 조건식 결과가 참일때 실행할 문장;

       else 조건식 결과가 거짓일때 실행할 문장;

     end if;


문제) 특정사원이 커미션을 받는지 안 받는지 구분해서 출력하시오.

    예1: 사번7788은 SCOTT사원이고 커미션을 받지 않습니다.


    예2: 사번7654은 MARTIN사원이고 커미션을 1400 받습니다.

    

  ==> if_else_test.sql  


3. if~elsif~else문

    형식)

    

    if 조건식1

      then 조건식1결과 참일때 실행할 문장;

      elsif 조건식2

        then (조건식1에 거짓이고) 조건식2결과 참일때 실행할 문장;

      elsif 조건식3

        then (조건식1,2에 거짓이고) 조건식3결과 참일때 실행할 문장;

      else 조건식 1,2,3에 거짓일때 실행할 문장;

    end if;

Comments