본문 바로가기
개발/sql

oracle sql function,procedure

by 카앙구운 2015. 10. 8.
728x90
반응형

프로시저 -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')

728x90
반응형

'개발 > 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

댓글