728x90
트랜젝션(transaction)
- DBMS에서 발생하는 1개 이상의 명령어들을 논리집합으로 묶어놓은 단위
- 트랜젝션에 의해 관리되는 명령어 : DML(insert, update, delete)만 포함 -> 데이터에 조작을 가하는 명령어
트랜젝션 관리
- commit : DB반영
- rollback : 처음으로 되돌림
- savepoint : 저장단위
auto commit(기본)
- 자동 저장 기능
- 모든 insert, update, delete를 각각 실행할 때마다 commit가 바로 이어서 실행됨
- rollback 불가능
테이블 복사 생성
create table 테이블명 as select 복사할 컬럼명1, 복사할 컬럼명2, ... from 복사할 테이블명
create table tb_member_copy
as
select mem_idx, mem_userid, mem_userpw, mem_name, mem_gender, mem_regdate from tb_member;
테이블 조회
select * from tb_member_copy;
auto commit 해제
set autocommit off; -- auto commit을 해제
데이터 삭제
delete from tb_member_copy where mem_idx in (1, 2);
삭제된 데이터 복구
rollback;
데이터 삭제
delete from tb_member_copy where mem_idx in (1, 2);
commit
commit;
DB에 반영하였으므로 rollback 해도 삭제된 데이터가 복구되지 않음
savepoint 생성
delete from tb_member_copy where mem_userid = 'avocado';
savepoint a;
delete from tb_member_copy where mem_userid = 'cherry';
savepoint b;
savepoint a로 rollback
rollback to a; -- a지점으로 이동 cherry만 rollback
update 프로시저 생성
create or replace procedure proc_member_Addr (
p_userid in varchar2,
p_address1 in varchar2,
p_address2 in varchar2,
p_address3 in varchar2
)
is
begin
update tb_member set mem_address1=p_address1, mem_address2=p_address2, mem_address3=p_address3 where mem_userid=p_userid;
exception
when others then
rollback;
dbms_output.put_line('SQL EXCEPTION');
end proc_member_Addr;
데이터 수정
exec proc_member_addr('apple', '부산', '해운대구', '해운대앞');
포인트 컬럼 추가
업데이트 개수확인용 프로시저 생성
create or replace procedure proc_member_update_count
(
p_userid in varchar2,
p_point in number,
o_update_cnt out number
)
is
update_cnt number;
begin
update tb_member set mem_point = mem_point + p_point where mem_userid = p_userid;
update_cnt := SQL%ROWCOUNT; -- SQL%ROWCOUNT : 몇 개의 행이 반영되었는지 반환
o_update_cnt := update_cnt;
exception
when others then
rollback;
dbms_output.put_line('SQL EXCEPTION');
end proc_member_update_count;
'apple' 유저 1000포인트 추가
declare
out1 number;
begin
proc_member_update_count('apple', 1000, out1);
dbms_output.put_line(out1);
end;
결과
728x90
'SQL > Oracle' 카테고리의 다른 글
[Oracle] Oracle 함수 (0) | 2022.06.16 |
---|---|
[Oracle] 커서(cursor) (0) | 2022.06.16 |
[Oracle] 프로시저 예제 (0) | 2022.06.16 |
[Oracle] 프로시저(procedure) (0) | 2022.06.16 |
[Oracle] 예외 처리(Exception) (0) | 2022.06.16 |