-- 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);
'PL-SQL' 카테고리의 다른 글
PL/SQL (6) CURSOR, BASIC LOOP을 활용한 프로시저 만들어보기 (0) | 2017.03.24 |
---|---|
PL/SQL (5) 부서번호를 물어보게 하고 부서번호를 입력하면 해당 부서번호에 속한 사원들의 사원번호, 이름, 월급을 출력하는 예제 (0) | 2017.03.24 |
PL/SQL (4) ORA-01403: no data found 대처 SQL문 (EXCEPTIOIN) (0) | 2017.03.24 |
PL/SQL (3) 프로시저를 사용하여 다른테이블로 INSERT 예제 (0) | 2017.03.23 |
PL/SQL (1) LOOP + LPAD함수 +프로시저 예제 (0) | 2017.03.23 |