Oracle SQL_5

2024. 12. 12. 19:07·DB/Oracle SQL

2024-11-19

 

 

 

 

 

 

 

 

 

/*
    RL/SPL(Procedual Language / SQL)
    - SQL 만으로는 구현이 어렵거나 구현 불가능한 작업을 수행하기
      위해서 오라클에서 제공하는 프로그래밍 언어를 말함.
    - 일반적으로 프로그래밍 언어적인 요소들을 다 가지고 있으며,
      데이터베이스 업무를 처리하기 위한 최적화된 언어.
    - 변수, 조건 처리, 반복 처리 등 다양한 기능을 사용할 수 있음.
    - PL/SQL 애플리케이션 서버 쪽에서 실행되는 것이 아니라,
      데이터베이스 엔진 쪽에서 수행이 됨. 따라서 데이터와 가장
      가까운 곳에 위치하고 있으므로 애플리케이션 서버로 데이터를
      주고 받는데 따르는 네트워크 트래픽이 최소화 된다는 장점이 있음.
      
    - 기본 구조
      1) 선언부(declare) : 모든 변수나 상수를 선언하는 부분 
      2) 실행부(executable - begin)
        - 실제 로직이 실행되는 부분.
        - 제어문(조건문), 반복문, 함수 정의 등의 로직을 기술하는 부분.
      3) 예외처리부(exception)
        - 실행 도중 예외가 발생 시 해결하기 위한 명령들을 기술하는 부분.
        
    ※ 위 기본 구조 중에서 선언부와 예외처리부는 생략이 가능하지만,
      실행부는 반드시 존재해야 함.
      
    - PL/SQL 사용 시 주의사항
      1) 기본 구조(declare, begin, exception) 키워드 뒤에는
         세미콜론(;)을 붙이지 않는다.
      2) 블럭의 각 부분에서 실행해야 하는 문장 끝에는 반드시 세미콜론(;)
         을 붙인다.
      3) begin ~ end(실행부) 밑에는 반드시 "/"를 붙여 주어야 한다.
*/

-- 화면에 출력 기능을 활성화를 시켜 주어야 한다.
SET SERVEROUTPUT ON;

-- "Hello!! PL/SQL" 이라는 문장을 화면에 출력해보자.
BEGIN
-- 화면(콘솔)에 문장을 출력하는 명령문.
    dbms_output.put_line('Hello!! PL/SQL');
END;
/

-- 선언부(declare) 영역에 변수를 선언하는 방법
-- 1) 스칼라 자료형
--    형식) 변수명 자료형(크기)
--          예) num number / name varchar2(30);
DECLARE 
    v_empno NUMBER(4) := 7788;
    v_ename VARCHAR2(30);
BEGIN
    v_ename := 'ADAMS';
    
    dbms_output.put_line('v_empno >>> ' || v_empno);
    dbms_output.put_line('v_ename >>> ' || v_ename);
END;
/

-- 2) 레퍼런스 자료형
--    형식) 변수명 테이블명.컬럼%type;
--          예) num emp.empno%type;
DECLARE
    e_empno emp.empno%TYPE;
    e_ename emp.ename%TYPE;
BEGIN
    e_empno := 7900;
    e_ename := 'SCOTT';
    
    dbms_output.put_line('e_empno >>> ' || e_empno);
    dbms_output.put_line('e_ename >>> ' || e_ename);
END;
/

-- 3) rowtype 자료형
--    테이블의 모든 컬럼을 한꺼번에 저장하기 위한 변수로 처리하는 방법.
--    형식) e_row emp%rowtype;
DECLARE
    e_row emp%rowtype;
BEGIN
    SELECT * INTO e_row
    FROM emp
    WHERE empno = 7698;
    
    dbms_output.put_line(e_row.empno || ' ' || e_row.ename || ' ' || e_row.job || ' ' || 
                        e_row.mgr || ' ' || e_row.hiredate || ' ' || e_row.sal || ' ' || 
                        e_row.comm || ' ' || e_row.deptno);
END;
/

/*
    조건문
    - 특정 조건식을 통해 상황에 따라 내용을 달리하는 방식의 명령문을 말함.
    
    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
                    조건식1이 거짓이고, 조건식2가 참인 경우 실행 문장;
                elsif 조건식3
                    조건식1, 2가 거짓이고, 조건식3이 참인 경우 실행 문장;
                else
                    모든 조건식이 거짓인 경우 실행 문장;
                end if;
*/          

-- 1) if ~ then 조건문
DECLARE
    e_number NUMBER := 77;
BEGIN
    if e_number >= 50 then
        dbms_output.put_line(e_number || ' 은(는) 50보다 큰 수 입니다.');
    end if;
END;
/

-- 2) if ~ then ~ else 조건문
-- [문제] 변수에 들어있는 값이 홀수인지, 짝수인지 판별하여 화면에 출력하세요.
DECLARE
    e_su NUMBER := 50;
BEGIN
    if mod(e_su, 2) = 1 then
        dbms_output.put_line(e_su || ' 은(는) 홀수 입니다.');
    else
        dbms_output.put_line(e_su || ' 은(는) 짝수 입니다.');
    end if;
END;
/

-- 3) if ~ then ~ elsif 조건문
DECLARE
    e_avg NUMBER(5, 2) := 92.34;
BEGIN
    if e_avg >= 90 then
        dbms_output.put_line('A학점입니다.');
    elsif e_avg >= 80 then
        dbms_output.put_line('B학점입니다.');
    elsif e_avg >= 70 then
        dbms_output.put_line('C학점입니다.');
    elsif e_avg >= 60 then
        dbms_output.put_line('D학점입니다.');
    else
        dbms_output.put_line('F학점입니다.');
    end if;
END;
/   


-- 키보드로 데이터를 입력 받는 방법
-- 형식) &
DECLARE
    e_num NUMBER;
BEGIN
    e_num := '&num';
    
    dbms_output.put_line('키보드로 입력 받은 데이터 >>> ' || e_num);
END;
/

/*
    case 조건문
    형식)
            case 조건문
                when 값1 then
                    값1일때 수행할 문장;
                when 값2 then
                    값2일때 수행할 문장;
                when 값3 then
                    값3일때 수행할 문장;
                else
                    값1, 2, 3 이 아닌 다른 값일 경우 수행할 문장;
                    ==> java의 default 와 같음
            end case;    
*/
-- [문제] 키보드로 점수를 입력 받아서 학점을 화면에 출력해 보세요.
--       단, case 조건문을 이용 할 것.
DECLARE
    e_score NUMBER(5, 2);
BEGIN
    e_score := '&score';
    
    case trunc(e_score / 10)
        when 9 then
            dbms_output.put_line('A학점입니다.');
        when 8 then
            dbms_output.put_line('B학점입니다.');
        when 7 then
            dbms_output.put_line('C학점입니다.');
        when 6 then
            dbms_output.put_line('D학점입니다.');
        else
            dbms_output.put_line('F학점입니다.');
    end case;
END;
/


/*
    반복문
    - 특정 작업을 반복하여 수행하고자 할 때 사용하는 문장.
    - 반복문의 종류
      1) 기본 loop
        - 가장 기본적인 반복문
      2) while loop
        - 특정 조건의 결과를 통해서 반복을 수행하는 반복문.
      3) for loop
        - 반복 횟수를 정하여 반복을 수행하는 반복문.
    - 반복문의 반복적인 수행을 종료 시키는 명령어
      1) exit
        - 수행 중인 반복을 종료시키는 명령어.
      2) exit ~ then
        - 반복 종료를 위한 조건식을 지정하고 만족하면
          반복을 종료시키는 명령어.
      3) continue
        - 수행중인 반복의 현재 주기를 건너뛰는 명령어.
      4) continue ~ when
        - 특정 조건식을 지정하고 조건식을 만족하면 반복
          주기를 건너뛰는 명령어.
*/

-- 기본 loop 반복을 사용해 보자.
DECLARE
    e_num NUMBER := 1;
BEGIN
    LOOP
        dbms_output.put_line('e_num >>> ' || e_num);
        e_num := e_num + 1;
        
        if (e_num > 10) THEN
            EXIT;
        END if;
        
    end loop;
END;
/

-- while loop
DECLARE
    e_num NUMBER := 1;
    e_sum NUMBER := 0;      -- 합을 누적시키는 변수
BEGIN
    dbms_output.put_line('*** 1 ~ 100 까지의 합 ***');

    while e_num <= 100 loop
        e_sum := e_sum + e_num;
        e_num := e_num + 1;
    end loop;
    
    dbms_output.put_line('1 ~  100 까지의 합 >>> ' || e_sum);
END;
/

-- for loop
DECLARE
    e_tot NUMBER := 0;
BEGIN
    dbms_output.put_line('*** for loop를 이용한 1 ~  100 까지의 합 ***');
    
    for e_su in 1 .. 100 loop
        e_tot := e_tot + e_su;
    end loop;
    
    dbms_output.put_line('1 ~  100 까지의 합 >>> ' || e_tot);
END;
/

'DB > Oracle SQL' 카테고리의 다른 글

Oracle SQL_4  (0) 2024.12.12
Oracle SQL_3  (0) 2024.12.12
Oracle SQL_2  (0) 2024.12.12
Oracle SQL_01  (0) 2024.12.12
'DB/Oracle SQL' 카테고리의 다른 글
  • Oracle SQL_4
  • Oracle SQL_3
  • Oracle SQL_2
  • Oracle SQL_01
mw41817
mw41817
일생의 개발 기록 저장소
  • mw41817
    IT 개발 일지
    mw41817
    • Index (487)
      • HTML (36)
        • 기초 내용 정리 (36)
      • CSS (29)
        • 기초 내용 정리 (29)
      • JavaScript (60)
        • 기초 내용 정리 (60)
      • JQuery (38)
        • 기초 내용 정리 (38)
      • Java (232)
        • 기초 내용 정리 (232)
      • JSP (46)
        • 기초 내용 정리 (46)
      • Spring, Boot (31)
        • 기초 내용 정리 (31)
      • DB (5)
        • Oracle SQL (5)
      • Code WorkBook (6)
        • programmers (6)
        • Baekjoon (0)
      • 기타 (1)
        • 유용한 사이트 (3)
  • 전체
    오늘
    어제
  • 글쓰기 관리
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 카테고리
    • 주인장 GitHub
  • 공지사항

  • 인기 글

  • 태그

    html #코딩 #프로그래밍 #기초
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
mw41817
Oracle SQL_5
상단으로

티스토리툴바