본문 바로가기
자바 풀스택 공부

Day 58. [PL/SQL] 익명 블록, 제어문

by seung_nari 2022. 3. 29.

익명 블록 사용 방법

SET SERVEROUTPUT ON;
SET TIMING ON;

DECLARE
    vi_num INTEGER;
BEGIN
    vi_num := 100.5;
    DBMS_OUTPUT.PUT_LINE(vi_num);
END;
/

DECLARE
    A INTEGER := 2**2*3**2;
BEGIN
    DBMS_OUTPUT.PUT_LINE('A = '||A);
END;
/

DECLARE
    V_NAME STUDENT.NAME%TYPE;
    V_DEPTNO STUDENT.DEPTNO%TYPE;
BEGIN
    SELECT NAME, DEPTNO
    INTO V_NAME, V_DEPTNO
    FROM STUDENT 
    WHERE STUDNO = 10101;
    DBMS_OUTPUT.PUT_LINE(V_NAME || '-' || V_DEPTNO);
END;
/

 

IF문

DECLARE
    VN_NUM1 NUMBER := 5;
    VN_NUM2 NUMBER := 2;
BEGIN
    IF VN_NUM1 >= VN_NUM2 THEN
        DBMS_OUTPUT.PUT_LINE(VN_NUM1 || '이 큰수');
    ELSE
        DBMS_OUTPUT.PUT_LINE(VN_NUM2 || '이 큰수');
    END IF;
END;
/

1. 사원 테이블에서 사원번호가 제일 큰 사원을 찾아낸 뒤, 이 '번호+1' 번으로 아래의 사원을 사원 테이블에 신규 입력하는 익명 블록을 만들어보자.

 

<사원명> : Harrison Ford

<이메일> : HARRIS

<입사일자> : 현재일자

<부서전호> : 50

 

2. 구구단 중 3단을 출력하는 익명 블록을 만들어보자.

 

3. 사원테이블에서 201번 사원의 이름과 이메일 주소를 출력하는 익명 블록을 만들어보자.

SET SERVEROUTPUT ON;
SET TIMING ON;

DECLARE
    V_EMPID EMPLOYEES.EMPLOYEE_ID%TYPE;
BEGIN
    SELECT MAX(EMPLOYEE_ID) + 1 INTO V_EMPID FROM EMPLOYEES;
    DBMS_OUTPUT.PUT_LINE(V_EMPID);
    
    INSERT INTO EMPLOYEES(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, HIRE_DATE, JOB_ID, DEPARTMENT_ID)
    VALUES (V_EMPID, 'Harrison', 'Ford', 'HARIIS', SYSDATE, 'ST_MAN', 50);
    
    commit;
END;
/

-- 구구단 중 3단 출력

DECLARE
    J NUMBER := 1;
BEGIN
    DBMS_OUTPUT.PUT_LINE(3 || ' * ' || J || ' = ' || 3 * J);
    J := J + 1;
    DBMS_OUTPUT.PUT_LINE(3 || ' * ' || J || ' = ' || 3 * J);
    J := J + 1;
    DBMS_OUTPUT.PUT_LINE(3 || ' * ' || J || ' = ' || 3 * J);
    J := J + 1;
    DBMS_OUTPUT.PUT_LINE(3 || ' * ' || J || ' = ' || 3 * J);
    J := J + 1;
    DBMS_OUTPUT.PUT_LINE(3 || ' * ' || J || ' = ' || 3 * J);
    J := J + 1;
    DBMS_OUTPUT.PUT_LINE(3 || ' * ' || J || ' = ' || 3 * J);
    J := J + 1;
    DBMS_OUTPUT.PUT_LINE(3 || ' * ' || J || ' = ' || 3 * J);
    J := J + 1;
    DBMS_OUTPUT.PUT_LINE(3 || ' * ' || J || ' = ' || 3 * J);
    J := J + 1;
    DBMS_OUTPUT.PUT_LINE(3 || ' * ' || J || ' = ' || 3 * J);
END;
/

DECLARE
    V_FIRST_NAME EMPLOYEES.FIRST_NAME%TYPE;
    V_LAST_NAME EMPLOYEES.LAST_NAME%TYPE;
    V_EMAIL EMPLOYEES.EMAIL%TYPE;
BEGIN
    SELECT FIRST_NAME, LAST_NAME, EMAIL
    INTO V_FIRST_NAME, V_LAST_NAME, V_EMAIL
    FROM EMPLOYEES
    WHERE EMPLOYEE_ID = 201;
    DBMS_OUTPUT.PUT_LINE(V_FIRST_NAME || ' ' || V_LAST_NAME || ' ' || V_EMAIL || '@naver.com');
END;
/

DECLARE
    VN_SALARY NUMBER := 0;
    VN_DEPARTMENT_ID NUMBER := 0;
BEGIN
    VN_DEPARTMENT_ID := ROUND(DBMS_RANDOM.VALUE(10, 120), -1);
    
    SELECT SALARY
    INTO VN_SALARY
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID = VN_DEPARTMENT_ID
    AND ROWNUM = 1;
    
    DBMS_OUTPUT.PUT_LINE(VN_SALARY);
       
    IF VN_SALARY BETWEEN 1 AND 3000
        THEN DBMS_OUTPUT.PUT_LINE('낮음');
    ELSIF VN_SALARY BETWEEN 3001 AND 6000
        THEN DBMS_OUTPUT.PUT_LINE('중간');
    ELSIF VN_SALARY BETWEEN 6001 AND 9000
        THEN DBMS_OUTPUT.PUT_LINE('높음');
    ELSE
        DBMS_OUTPUT.PUT_LINE('최상위');
    END IF;
END;
/

SELECT
    ROUND(1234.567),
    ROUND(1234.567, 1),
    ROUND(1234.567, 0),
    ROUND(1234.567, -1)
BEGIN
    
END;
/

댓글