프로시저 -FUNCTION은 반드시 출력(return 값)해야하지만 프로시저는 반드시 출력할 필요는 없다.
(1) 사원번호를 입력받아 급여를 출력하는 프로시저
set serveroutput on
ed procTest1
create or replace procedure procTest1
(v_empno in number)
is
v_sal number;
begin
select sal into v_sal from emp where empno=v_empno;
dbms_output.put_line(v_sal);
end;
/
@ procTest1
execute procedure(7900);
(2) 새로운 부서번호와 부서,위치를 생성하는 프로시저
(단,같은 부서번호가 없을 때만 생성)
set serveroutput on
ed procDeptAdd
create or replace procedure procDeptAdd
(v_deptno in dept.deptno%type,
v_dname in dept.dname%type,
v_loc in dept.loc%type)
is
v_cnt number(3):=0;
begin
select count(*) into v_cnt from dept where deptno=v_deptno;
if v_cnt=0 then
insert into dept(deptno,dname,loc) values(v_deptno,v_dname,v_loc);
else
dbms_output.put_line('이미 존재하는 부서번호입니다.');
end if;
end;
/
@procDeptAdd
execute procDeptAdd(50,'PROGRAMMER','LA');
--------------------------------------------------------------
(3)사원번호,보너스 인상율, 날짜를 입력받아 bonus2테이블에 입력
(bonus2 테이블에 사원번호와 날짜가 같은 데이터가 없으면 입력)
create table bonus2(
empno number(4) not null,
bonus number(7,2),
gdate date);
create or replace procedure bonus_input
(r_empno in number, r_per in number,r_date in varchar2)
is
cnt1 number:=0;
cnt2 number:=0;
v_bonus number:=0;
v_sal number:=0;
begin
select count(*) into cnt1 from emp where empno=r_empno;
if cnt1>0 then
select count(*) into cnt2 from bonus2 where empno=r_empno
and to_char(gdate,'YYYY-mm-dd')= r_date;
if cnt2 = 0 then
select sal into v_sal from emp where empno=r_empno;
v_bonus:=ceil(v_sal * (r_per/100));
insert into bonus2 values(r_empno,v_bonus,r_date);
end if;
end if;
end;
/
@bonus_input
execute bonus_input(7839,50,'2015-03-10')
'개발 > sql' 카테고리의 다른 글
oracle sql tigger (0) | 2015.10.12 |
---|---|
oracle sql procedure (0) | 2015.10.08 |
oracle 중간점검 (0) | 2015.10.07 |
oracle sql 서브쿼리,function,no_data_found,too_many_rows,others (0) | 2015.10.07 |
oracle sql function, dual,upper (0) | 2015.10.06 |
댓글