코드 :
--자습시간 문제. 이수자 평가 포함
--오늘의 마지막 문제1. (이수자 평가 문제3번) emp21 에 아래와 같이 데이터를 입력하는 프로시져를 생성하는데
--입력하면서 결과가 바로 출력되게 하시오.
/*
exec emp21_pro1( 24,’장영신’, 32, ‘kt’, ‘컴퓨터’, ‘서울시 강남구’, ‘jang@naver.com’);
장영신님은 30대이고 서울에서 거주합니다. 그리고 emp21 에 입력되었습니다.
*/
CREATE OR REPLACE PROCEDURE emp21_pro1
( p_empno IN emp21.empno%TYPE,
p_ename IN emp21.ename%TYPE,
p_age IN emp21.age%TYPE,
p_telecom IN emp21.telecom%TYPE,
p_major IN emp21.major%TYPE,
p_address IN emp21.address%TYPE,
p_email IN emp21.email%TYPE
)
IS
v_age varchar2(20);
v_address emp21.address%TYPE;
BEGIN
INSERT INTO emp21 ( empno, ename, age, telecom, major, address, email )
VALUES ( p_empno, p_ename, p_age, p_telecom, p_major, p_address, p_email )
returning trunc(age/10)*10||'대', substr(address,1,2) into v_age, v_address;
dbms_output.put_line( p_ename||'님은 '||v_age||'이고 '||v_address||'에서 거주합니다. 그리고 emp21 에 입력되었습니다.');
END;
/
exec emp21_pro1( 24,'장영신', 32, 'kt', '컴퓨터','서울시 강남구', 'jang@naver.com');
select * from emp21;
코드 :
--오늘의 마지막 문제2. (이수자 평가 문제4번 제출물) 아래의 update 문을 merge 문으로 변경하시오
--변경전
update dept d
set cnt = ( select count(*)
from emp e
where e.deptno = d.deptno );
--변경후
merge into dept d
using (select dept.deptno, count(emp.deptno) "부서별직원수"
from dept, emp
where dept.deptno = emp.deptno(+)
group by dept.deptno) e
on (e.deptno = d.deptno)
when matched then
update set d.cnt = e.부서별직원수;
코드 :
--오늘의 마지막 문제3.(이수자 평가 문제5번 제출물) 아래의 사용자 정의 함수로 만들어서 수행되게하시오.
--(년도를 입력하면 해당 년도의 토탈월급 출력되는 함수)
CREATE OR REPLACE FUNCTION year_sum
( p_year VARCHAR2 )
RETURN NUMBER
DETERMINISTIC
RESULT_CACHE
IS
v_sumsal NUMBER(10);
BEGIN
SELECT sum(sal) into v_sumsal
FROM emp
WHERE to_char(hiredate,'RRRR') = p_year;
RETURN v_sumsal;
END;
/
SELECT year_sum('1980') as "1980",
year_sum('1981') as "1981",
year_sum('1982') as "1982",
year_sum('1983') as "1983"
from dual;