PL/SQL - 1

DONI·2022년 2월 24일
1

Oracle

목록 보기
15/22
post-thumbnail

🏹 PL/SQL (Procedural Language extension to SQL)

오라클 DBMS에서 SQL 언어를 확장하기 위해 사용하는 절차적 프로그래밍 언어
SQL 문장 내에서 변수 정의, 조건 처리(IF), 반복 처리(LOOP, FOR, WHILE) 등을 지원

  • PL/SQL의 구조

    • 선언부(DECLARE SECTION) : 변수, 상수 선언
    • 실행부(EXECUTABLE SECTION) : 제어문, 반복문, 함수 정의 등의 로직 기술
    • 예외처리부(EXCEPTION SECTION) : 예외 발생 시 이를 해결하기 위한 문장 기술
  • PL/SQL의 장점

    • PL/SQL은 BLOCK 구조로 다수의 SQL 문을 한번에
      ORACLE DB로 보내서 처리하므로 수행 속도를 향상시킬 수 있다.
    • PL/SQL의 모든 요소는 하나 또는 두 개 이상의 블록으로 구성하여 모듈화할 수 있다.
    • 단순, 복잡한 데이터 형태의 변수를 선언할 수 있다.
    • 테이블의 데이터 구조와 컬럼명에 준하여 동적으로 변수를 선언할 수 있다.
    • EXCEPTION 처리 루틴을 이용하여 ORACLE SERVER ERROR를 처리할 수 있다.
    • 사용자 정의 에러를 선언하고 처리할 수 있다.

    📍 PL/SQL 작성 예시

          ▪ 프로시저 사용 시 출력하는 내용을 화면에 보여주도록 설정하는
            환경 변수를 ON으로 변경 (기본 값 : OFF)
            SET SERVEROUTPUT ON;

          ▪ 화면에 'HELLO WORLD' 출력
            BEGIN
            DBMS_OUTPUT.PUT_LINE('HELLO WORLD');
            END;
            /

       ⭐ END 뒤 '/' 기호는 PL/SQL을 종결시킨다는 의미!


🚩 소스코드1 - 타입 변수 선언, 초기화

DECLARE -- 선언부
    ST_ID NUMBER;
    ST_NAME VARCHAR2(30);
    DEPT VARCHAR2(30) := '경영정보'; -- 대입 연산자 (:=)
    PI CONSTANT NUMBER := 3.141592; -- 상수 (CONSTANT)
BEGIN -- 실행부
    ST_ID := 10955;
    ST_NAME := '하람코';
    DBMS_OUTPUT.PUT_LINE('학번 : ' || ST_ID); -- 연결 연산자 (||)
    DBMS_OUTPUT.PUT_LINE('이름 : ' || ST_NAME);
    DBMS_OUTPUT.PUT_LINE('학과 : ' || DEPT);
    DBMS_OUTPUT.PUT_LINE('PI : ' || PI);
END;
/

🧶 출력 결과

학번 : 10955
이름 : 하람코
학과 : 경영정보
PI : 3.141592


🚩 소스코드2 - 레퍼런스 변수 선언, 초기화

  • 레퍼런스 변수 : 변수의 데이터 타입을 테이블 또는 뷰의 컬럼에서 참조하여 지정
    • %TYPE : 해당 컬럼의 데이터 타입을 얻어옴
    • %ROWTYPE : 한 행에 있는 모든 컬럼의 데이터 타입을 얻어옴

    📍 %TYPE

DECLARE
    EMP_ID EMPLOYEE.EMP_ID%TYPE;
    EMP_NAME MPLOYEE.EMP_NAME%TYPE;
    DEPT_CODE EMPLOYEE.DEPT_CODE%TYPE;
    JOB_CODE EMPLOYEE.JOB_CODE%TYPE;
    SALARY EMPLOYEE.SALARY%TYPE;
BEGIN
    SELECT EMP_ID, EMP_NAME, DEPT_CODE, JOB_CODE, SALARY
    INTO EMP_ID, EMP_NAME, DEPT_CODE, JOB_CODE, SALARY
    -- SELECT 조회 결과 컬럼 값을 선언한 변수에 대입
    FROM EMPLOYEE WHERE EMP_NAME = '&EMP_NAME : '; -- 값 입력 화면 (&)
    DBMS_OUTPUT.PUT_LINE(EMP_ID);
    DBMS_OUTPUT.PUT_LINE(EMP_NAME);
    DBMS_OUTPUT.PUT_LINE(DEPT_CODE);
    DBMS_OUTPUT.PUT_LINE(JOB_CODE);
    DBMS_OUTPUT.PUT_LINE(SALARY);
END; 
/

    📍 %ROWTYPE

DECLARE
    EMP EMPLOYEE%ROWTYPE;
BEGIN
    SELECT * INTO EMP FROM EMPLOYEE 
    WHERE EMP_ID = '&EMP_ID';
    DBMS_OUTPUT.PUT_LINE('EMP_ID : ' || EMP.EMP_ID);
    DBMS_OUTPUT.PUT_LINE('EMP_NAME : ' || EMP.EMP_NAME);
    DBMS_OUTPUT.PUT_LINE('EMP_NO : ' || EMP.EMP_NO);
    DBMS_OUTPUT.PUT_LINE('SALARY : ' || EMP.SALARY);
END;
/
profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글