Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

꺄르륵

[Oracle SQL Developer] 기초 XXI - PL/SQL 본문

프로그래밍/DB

[Oracle SQL Developer] 기초 XXI - PL/SQL

Teddy. 2019. 10. 29. 19:58

PL/SQL 


1.1. 설명
    - PROCEDURAL LANGUAGE SQL
    - 서버에 미리 컴파일하여 저장해 놓은 모듈
    - BLOCK 구조가 기본
    - 변수, 매개변수, 커서, 분기문, 반복구조가 지원된다.
    - ANONYMOUS BLOCK, STORED PROCEDURE, FUNCTION, PACKAGE, TRIGGER
  
  
  1.2. 기본구조
  
  [이름부(매개변수)] -- 이름부가 존재하지 않으면 한번만 사용되고 사라진다. ANONYMOUS BLOCK = 익명 클래스와 같이 생각하면 될듯
  [DECLARE]
    선언부(변수, 상수, 커서, 사용자 정의 예외) 타입명;
  [BEGIN]  
    처리부(실행을 위한 로직 구성);
  [EXCEPTION]  
    발생된 예외사항의 예외처리;
  END;


  -- 보기(V) -> DBMS 출력 -> + 눌러서 계정 선택
  
  EX) 문자변수 'My First PL/SQL'을 저장한 후 출력하는 익명 블록을 작성하시오.
  (V - 변수, P - 파라미터);
  
  DECLARE
   V_TEMP VARCHAR2(50); --:= 'My First PL/SQL';
   -- 숫자, 문자 따지지 않고 초기화시키지 않은 값은 모두 NULL 로 초기화된다.
  BEGIN
   V_TEMP := 'My First PL/SQL';
   DBMS_OUTPUT.PUT_LINE(V_TEMP);
  END;
  / 
  -- 익명 블럭의 끝은 '/' 를 사용하여 강제실행 시킨다. --> SQL+ 에서 사용한다. 실행명령어 이다.
  
  EX) 반지름이 12.5인 원의 넓이를 구하는 익명 블록 작성.
  
  DECLARE 
   V_RADIUS NUMBER := 12.5;
   V_AREA NUMBER;
  BEGIN
   V_AREA := POWER(V_RADIUS,2)*3.1415926;
   DBMS_OUTPUT.PUT_LINE('원의 너비 = ' || V_AREA);
  END; 


  EX) 키보드로 회원번호를 입력 받아 회원테이블에서 해당회원을 조회한 후
      회원번호, 회원명, 마일리지를 출력하는 익명블록 작성;
  -- 참조형 선언 방법
  
  -- 입력용
  ACCEPT P_MEMID PROMPT '회원번호를 입력해주세요. : '
      
  DECLARE    
    V_ID MEMBER.MEM_ID%TYPE; -- MEM_ID를 만들때 사용된 타입과 크기가 V_ID도 똑같이 설정된다.
    V_NAME MEMBER.MEM_NAME%TYPE;
    V_MILEAGE MEMBER.MEM_MILEAGE%TYPE;
    V_TEMPID MEMBER.MEM_ID%TYPE;
  BEGIN
    V_TEMPID := '&P_MEMID'; -- 키보드로 입력받은 회원번호가 V_TEMPID에 저장된다. &는 뒤에 있는 변수가 ACCEPT 를 받아온다는 뜻.
    
    -- INTO 를 쓰면 각 위치에 해당하는 내용을 할당한다.
    SELECT MEM_ID, MEM_NAME, MEM_MILEAGE INTO V_ID, V_NAME, V_MILEAGE
      FROM MEMBER
     WHERE MEM_ID = V_TEMPID;
     
     DBMS_OUTPUT.PUT_LINE('회원번호 : ' || V_ID);
     DBMS_OUTPUT.PUT_LINE('회원명 : ' || V_NAME);
     DBMS_OUTPUT.PUT_LINE('마일리지 : ' || V_MILEAGE);
     
  EXCEPTION
    WHEN OTHERS THEN -- JAVA의 EXCEPTION 클래스와 같음 = 모든 예외처리를 잡아준다.
      DBMS_OUTPUT.PUT_LINE('예외발생 : ' || SQLERRM); -- SQL ERROR MESSAGE
  END;