본문 바로가기
개발/sql

oracle sql cursor update,delete, 무결성 제약조건

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

create table dept_no(dept_no number);

declare

cursor dept_cursor is select *from dept;

begin

for dept_record in dept_cursor loop

insert into dept_no(deptno) values(dept_record.deptno);

end loop;

end;

/


2.emp테이블로 커서를 만든 후 테이블 내용을 출력한다.


set serveroutput on

declare

cursor emp_cursor1 is select * from emp;

begin

for emp_record in emp_cursor1 loop

dbms_output.put_line(emp_record.ename||','||emp_record.job);

end loop;

end;

/



UPDATE

declare

cursor sal_cursor is

select sal from emp where deptno=30

for update of sal;//상위 select의 sal컬럼에 대한 쓰임

begin

for emp_record in sal_cursor loop

update emp

set sal=emp_record.sal *1.5

where current of sal_cursor; //현재 포인트가 가리키고 있는 커서

end loop;

end;

/


DELETE

declare

cursor sal_cursor is

select sal from emp where deptno=30

for update of sal;

begin

for emp_record in sal_cursor loop

delete emp

where current of sal_cursor;

end loop;

end;

/


--------------------------------------------------------------------------------

declare

v_empno emp.empno%type;

v_ename emp.ename%type;

begin

select empno,ename into v_empno,v_ename from emp;

exception

when too_many_rows then

dbms_output.put_line('결과 행이 너무 많습니다.');

when no_data_found then

dbms_output.put_line('결과 행이 없습니다.');

when others then

dbms_output.put_line('SQL명령을 다시 확인 해주세요');

end;

/


미리 정의가 되지 않은 오라클 서버의 예외처리


-> -02292는 무결성 제약조건을 위반하는 에러를 가리킨다.


delete from dept where deptno=10;



declare

err_dept1 exception;

pragma exception_init (err_dept1,-02292);

v_deptno dept.deptno%type :=&no;

begin

delete from dept where deptno=v_deptno;

exception

when err_dept1 then

dbms_output.put_line(to_char(v_deptno)||'번 부서는 삭제할 수 없습니다.');

end;

/


---------------------------------------------------------------------------------------

@인자를 가지는 커서

-인자값을 만들어진 커서에 넘겨줌으로 완전체가 된 조건문을 만든다.

(1) 조건값으로 인자값을 받아야되는 부서 select문을 만들어 사용한다.

declare

cursor dept_cursor(v_dname varchar2) is

select *from dept where dname=v_dname;

begin

for dept_record in dept_cursor('SALES') loop

insert into dept_no(deptno) values(dept_record.deptno);

end loop;

end;

/

728x90
반응형

'개발 > sql' 카테고리의 다른 글

oracle sql 서브쿼리,function,no_data_found,too_many_rows,others  (0) 2015.10.07
oracle sql function, dual,upper  (0) 2015.10.06
oracle sql 암시적 커서,명시적 커서,loop  (0) 2015.10.05
oracle sql  (0) 2015.10.05
oracle sql  (0) 2015.10.05

댓글