-- 1. WHILE .. LOOP 을 중첩으로 사용하여 4단 ~7단까지 출력하는 프로시저를 생성해보아라.


CREATE OR REPLACE PROCEDURE PR_GUGUDAN_4TO7

IS 


  V_OUT_DAN NUMBER(2) := 7;

  V_IN_DAN NUMBER(2) := 9;

  i NUMBER(2) := 3;

  j NUMBER(2) := 0;

  

BEGIN    -- 내가 생각하는 while 문 문법과 조금 다르다.

  <<Outer_loop>>

    WHILE i < V_OUT_DAN LOOP

      i := i+1;

      j := 0;

    DBMS_OUTPUT.PUT_LINE(i);

    <<Inner_loop>>

      WHILE j < V_IN_DAN LOOP

        j := j+1;

        DBMS_OUTPUT.PUT_LINE(j);

        DBMS_OUTPUT.PUT_LINE( i || '*' || j || ' = ' || i*j );

      END LOOP Inner_loop;

    END LOOP Outer_loop;

END;

/


EXEC PR_GUGUDAN_4TO7;



2-1. 부서번호를 물어보게 하고 부서번호를 입력하면 해당 부서번호의 토탈월급을 출력되게 하시오.


SET SERVEROUTPUT ON

SET VERIFY OFF

ACCEPT P_DEPT_NO PROMPT '부서번호를 입력하시오!'

DECLARE 

  V_DEPT_NO NUMBER(4) := &P_DEPT_NO; --&를 배먹으면 안된다.

  V_SUM_SAL NUMBER(10) := 0;

BEGIN 

  SELECT SUM(SAL) 

  INTO V_SUM_SAL

  FROM TB_LS_EMP867

  WHERE DEPT_NO = V_DEPT_NO;

  

  DBMS_OUTPUT.put_line('TOTAL SALAD: '||V_SUM_SAL);

END;

/



2-2. 부서번호를 입력하면 해당 부서번호의 토탈월급을 출력되게 하는 프로시저를 만들어라.

-- 프로시저호출 EXEC PR_DEPT_TOT_SAL(82)은 82번으로 해라.

CREATE OR REPLACE PROCEDURE PR_DEPT_TOT_SAL

  ( P_DEPT_NO IN NUMBER ) 

IS


BEGIN

  DECLARE

  V_DEPT_SAL NUMBER(10):= 0;


  BEGIN 

    SELECT SUM(SAL) 

    INTO V_DEPT_SAL

    FROM TB_LS_EMP867 

    WHERE DEPT_NO = P_DEPT_NO;

    DBMS_OUTPUT.PUT_LINE(V_DEPT_SAL);

  END;

  

END;

/


EXEC PR_DEPT_TOT_SAL(82);


-- 부서번호를 입력하면 해당 부서번호의 토탈월급을 출력되게 하는 프로시저를 만들어라.

-- 프로시저호출 EXEC PR_DEPT_TOT_SAL(82)은 82번으로 해라.

CREATE OR REPLACE PROCEDURE PR_DEPT_TOT_SAL

  ( P_DEPT_NO IN NUMBER ) 

IS 

  V_DEPT_SAL NUMBER(10):= 0;  -- DECLARE는 생략가능하다.


  BEGIN 

    SELECT SUM(SAL) 

    INTO V_DEPT_SAL

    FROM TB_LS_EMP867 

    WHERE DEPT_NO = P_DEPT_NO;

    DBMS_OUTPUT.PUT_LINE(V_DEPT_SAL);

  END;

  

/


EXEC PR_DEPT_TOT_SAL(82);



3-1. 사원번호를 물어보게 하고 사원의 부서번호, 이름, 월급, 아이디를 출력하게 하시오.

SET SERVEROUTPUT ON

ACCEPT P_EMP_NO PROMPT '사원번호를 입력하시오!'

DECLARE 

  V_EMP_NO NUMBER(8) := LPAD(&EMP_NO,8,0);

  V_EMP_NM VARCHAR2(30);

  V_EMP_ID VARCHAR2(30);

  V_SAL NUMBER(20) := 0;

  V_DEPT_NO NUMBER(4) := 0;


BEGIN 

  SELECT EMP_NM, EMP_ID, SAL, DEPT_NO 

  INTO V_EMP_NM, V_EMP_ID, V_SAL, V_DEPT_NO

  FROM TB_LS_EMP867

  WHERE EMP_NO = V_EMP_NO;

  DBMS_OUTPUT.put_line('이름: ' || V_EMP_NM);

  DBMS_OUTPUT.put_line('부서번호: ' || V_DEPT_NO);

  DBMS_OUTPUT.put_line('아이디: ' || V_EMP_ID);

  DBMS_OUTPUT.put_line('월급: ' || V_SAL);

END;  

/



3-2. 사원번호를 입력하면 해당사원의 부서번호, 이름, 월급, 아이디를 출력하는 프로시저를 만들어라.

-- 프로시저호출 EXEC PR_MEM_INFO(1)은 1번으로 해라. 

CREATE OR REPLACE PROCEDURE PR_MEM_INFO 

  (P_EMP_NO IN NUMBER) -- 프로시저의 IN, OUT 변수를 만들때에는 BYTE수를 쓰지 않아야한다. NUMBER(8)이런거 ERROR


IS

  V_EMP_NM VARCHAR2(30);

  V_EMP_ID VARCHAR2(30);

  V_SAL NUMBER(20) := 0;

  V_DEPT_NO NUMBER(4) := 0;

  

BEGIN

  SELECT EMP_NM, EMP_ID, SAL, DEPT_NO 

  INTO V_EMP_NM, V_EMP_ID, V_SAL, V_DEPT_NO

  FROM TB_LS_EMP867

  WHERE EMP_NO = P_EMP_NO;

  DBMS_OUTPUT.put_line('이름: ' || V_EMP_NM);

  DBMS_OUTPUT.put_line('부서번호: ' || V_DEPT_NO);

  DBMS_OUTPUT.put_line('아이디: ' || V_EMP_ID);

  DBMS_OUTPUT.put_line('월급: ' || V_SAL);

END;

/


EXEC PR_MEM_INFO(1);

+ Recent posts