database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
ㆍInformix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Informix Q&A 3439 게시물 읽기
No. 3439
Informix 프로시저 트랜잭션 관련 문의드립니다.
작성자
소유니
작성일
2015-08-26 09:16
조회수
4,872

 현재 spring jdbc 와 informxi 를 이용한 프로젝트 이용중입니다.

spring 기본 트랜잭션을 이용해서 일반적인 쿼리를 날리면 트랜잭션이 잘 걸리고 

rollback이 잘 되는 것을 확인했습니다.

위의 일반 적인 쿼리라 하면 아래와 같이.

 

   insert into t1(t1, t2)     values ('11','22');

    insert into t1(t1, t2)     values ('11','22');  // 여기서 유닉크 에러 발생되서 rollback 됩니다.

 

반면 프로시저에서는

 

 

create 프로시저 t1(

    insert into t1(t1, t2)     values ('11','22');

    insert into t1(t1, t2)     values ('11','22');  // 여기서 유닉크 에러 발생되도 앞에 테이블은 입력이 되고 두번째 줄은 유니크에러가 떠서 입력이 안됩니다.

-- 비긴 work

-- 커밋 work

end 프로시저

)

 

 

프로시저 내부에 특정 구문은 아무것도 없고 단순히 insert 문만 있습니다.

에러 발생시 

on 익셉션

return 메시지....     // 영어로 입력하니 한글로 입력합니다;;

end 익셉션 

리턴 값을 주거나 빼거나 다양한 방법을 시도 해 보았지만 

트랜잭션이 걸리지 않더군요.

혹시 경험해 보신분이 계신가요?

당연히 툴에서 call 프로시저명으로 호출해도 프로시저 내에 트랜잭션 설정이 없으니 트랜잭션은 안 걸립니다.

 

 

 

 

 

 

 

 

이 글에 대한 댓글이 총 3건 있습니다.

트랜잭션이라고 말씀하신 것이 프로시저 내 처리가 하나라도 실패하면 전체 롤백을 말씀하시는 건가요?

에러 발생시 전체 롤백하려면 말씀하신대로 exception을 사용하시면 될 것 같네요

프로시저는 잘 모르지만 아래 내용으로 테스트 해보았습니다. 참고하세요.

 

drop procedure testproc;
 
create procedure testproc () returning integer, varchar(50);
 
define sql_err integer;
define isam_err integer;
define sql_err_txt varchar(50);
 
on exception set sql_err, isam_err, sql_err_txt
rollback work;
return sql_err, sql_err_txt;
end exception
 
begin work;
begin
insert into test111 values (2);
insert into test111 values (2);
--insert into test111 values (3);
 
commit work;
return 0,'success';
 
end
end procedure;

 

정상규(pajama)님이 2015-08-26 13:27에 작성한 댓글입니다.

정상규님 친절한 댓글과 내용 감사드립니다.

이 문제는 informix 만의 문제는 아닌 것 같은데요.

우선, 말씀하신 프로시저 내에 on 익셉션에서 

롤백을 선언하면 잘 됩니다만.

문제는 spring 프레이워크에도 트랜잭션 설정이 되어 있고 

정책상 그 트랜잭션 처리만 해야 됩니다

때문에 프로시저 내에서 on 익셉션내에 롤백 처리를 못합니다 ㅜ

 

설명이 모호하네요 ㅜ 

다시 정리하자면

글등록 > 프로시저 호출 > 오류 발생 > 스프링 프레임워크 트랜잭션 롤백처리.

 

아 물론 위 스프링에서 롤백처리는 프로시저 말고 일반 쿼리를 하면 에러발생시 

롤백처리는 잘 됩니다. 그래서 informix 프로시저에서 제가 모르는 어떤 설정이 있나 

싶어서 여쭤 본겁니다.

 

 

 

 

 

 

 

 

소유니님이 2015-08-26 14:11에 작성한 댓글입니다. Edit

begin work 위치가 잘못되어있네요.

 

insert 문 다음에 begin work가 선언이 되어있기 때문에

각 insert 문은 건 by 건으로 처리가 됩니다.  ( 각 insert 문 별로 auto commit 처리 )

 

begin wok 구문을 insert 문 위쪽으로 올려보세요

 

 

....답변이 너무 늦은감이 있지만... 그럼 수고하세요~;;;

 

 

최성혁님이 2015-09-09 17:03에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3442함수 존재 여부 [2]
초보DBA
2016-03-29
4250
3441인포믹스 client sdk 2.70 버전 [1]
성화니
2016-03-28
3694
3440Update가 안 됩니다. [2]
에모토
2016-03-28
3459
3439Informix 프로시저 트랜잭션 관련 문의드립니다. [3]
소유니
2015-08-26
4872
3438인포믹스 사용자 계정 추가방법좀 알려주시면 감사하겠습니다. [1]
계정
2015-08-03
4343
3437인포믹스 컨버젼 PARTITION BY [2]
급해요
2015-07-17
4847
3436숫자로 된 데이터를 통화단위로 형변환. [1]
급해
2015-07-15
4440
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.057초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다