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;
/
'개발 > 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 |
댓글