Q&A

  • 저장프로시져를 사용하여 자료처리시 중복자료 처리..
안녕하세요. 조덕진입니다.



저장프로시져를 사용하여, 자료를 분리한 후 저장을 하고 있습니다. 그런데 이미 저장된

자료에 대한 수정이 발생되어 저장프로시져를 호출하면, 해당 자료가 추가로 저장이

됩니다. 이를 해결하기 위해서 EXISTS를 사용했지만, 틀린것이 있는지 계속해서

같은 처리가 됩니다.



다음은 제가 작성한 저장프로시져입니다. 고수님들의 답변 기다리겠습니다.



작업환경 : 델파이4/윈98/SQL-SERVER 2000



CREATE procedure gather_goods_USP AS

declare @vcode char(6)

declare @v110code char(5)

declare @v120code char(5)

declare @vindate datetime

declare @vseqno char(10)

declare @vcl_name varchar(10)

declare @vcl_tel varchar(11)

declare @vcl_code varchar(11)



declare read_cursor1 cursor dynamic scroll for select gather_130code1, gather_110code,gather_120code,gather_date,gather_seq,gather_cl_name,gather_cl_tel,gather_cl_code from kpbgather



open read_cursor1

fetch next from read_cursor1 into @vcode,@v110code,@v120code,@vindate,@vseqno,@vcl_name,@vcl_tel,@vcl_code while(@@fetch_status=0)

begin

if EXISTS (select a.* from gather_goods a where a.gt_gd_date = @vindate and a.gt_gd_seq = @vseqno and a.gt_110code = @v110code and a.gt_120code = @v120code and a.gt_cl_code = @vcl_code and a.gt_gd_code = @vcode)

begin

update gather_goods set gt_gd_date = @vindate, gt_gd_seq = @vseqno, gt_gd_code = @vcode, gt_110code = @v110code, gt_120code = @v120code, gt_cl_code = @vcl_code, gt_cl_name = @vcl_name, gt_cl_tel = @vcl_tel

end

else

begin

insert into gather_goods values (@vindate,@vseqno,@vcode,@v110code,@v120code,@vcl_name,@vcl_tel,@vcl_code)

end

fetch next from read_cursor1 into @vcode,@v110code,@v120code,@vindate,@vseqno,@vcl_name,@vcl_tel,@vcl_code

end

close read_cursor1



2  COMMENTS
  • Profile
    하니 2001.01.08 22:48
    이미 자료가 들어 있는지 존재여부를 확인할때

    if EXISTS (sql문장) then

    수정

    else

    입력

    이런식으로 처리하는것 맞는데 sql문장이 잘못된것 같네요.

    where절에는 해당자료의 키값만 비교해서 넣어야 되는데 제가 얼핏보기에는 이전에 입력된

    거의 모든 필드값을 다 비교하니까 수정한 값이 하나라도 있으면 다시 입력이 되겠죠.

    키값이 그렇게 여러개일 가능성은 별로인것 같구요.

    select절에 들어간 where의 키값비교가 그대로 나중에 update where절에도

    들어가야 겠죠.

    update 테이블명 set 수정되는 필드값 where 절





    조덕진 wrote:

    > 안녕하세요. 조덕진입니다.

    >

    > 저장프로시져를 사용하여, 자료를 분리한 후 저장을 하고 있습니다. 그런데 이미 저장된

    > 자료에 대한 수정이 발생되어 저장프로시져를 호출하면, 해당 자료가 추가로 저장이

    > 됩니다. 이를 해결하기 위해서 EXISTS를 사용했지만, 틀린것이 있는지 계속해서

    > 같은 처리가 됩니다.

    >

    > 다음은 제가 작성한 저장프로시져입니다. 고수님들의 답변 기다리겠습니다.

    >

    > 작업환경 : 델파이4/윈98/SQL-SERVER 2000

    >

    > CREATE procedure gather_goods_USP AS

    > declare @vcode char(6)

    > declare @v110code char(5)

    > declare @v120code char(5)

    > declare @vindate datetime

    > declare @vseqno char(10)

    > declare @vcl_name varchar(10)

    > declare @vcl_tel varchar(11)

    > declare @vcl_code varchar(11)

    >

    > declare read_cursor1 cursor dynamic scroll for select gather_130code1, gather_110code,gather_120code,gather_date,gather_seq,gather_cl_name,gather_cl_tel,gather_cl_code from kpbgather

    >

    > open read_cursor1

    > fetch next from read_cursor1 into @vcode,@v110code,@v120code,@vindate,@vseqno,@vcl_name,@vcl_tel,@vcl_code while(@@fetch_status=0)

    > begin

    > if EXISTS (select a.* from gather_goods a where a.gt_gd_date = @vindate and a.gt_gd_seq = @vseqno and a.gt_110code = @v110code and a.gt_120code = @v120code and a.gt_cl_code = @vcl_code and a.gt_gd_code = @vcode)

    > begin

    > update gather_goods set gt_gd_date = @vindate, gt_gd_seq = @vseqno, gt_gd_code = @vcode, gt_110code = @v110code, gt_120code = @v120code, gt_cl_code = @vcl_code, gt_cl_name = @vcl_name, gt_cl_tel = @vcl_tel

    > end

    > else

    > begin

    > insert into gather_goods values (@vindate,@vseqno,@vcode,@v110code,@v120code,@vcl_name,@vcl_tel,@vcl_code)

    > end

    > fetch next from read_cursor1 into @vcode,@v110code,@v120code,@vindate,@vseqno,@vcl_name,@vcl_tel,@vcl_code

    > end

    > close read_cursor1

    >

  • Profile
    조덕진 2001.01.09 02:20
    하니 wrote:

    > 이미 자료가 들어 있는지 존재여부를 확인할때

    > if EXISTS (sql문장) then

    > 수정

    > else

    > 입력

    > 이런식으로 처리하는것 맞는데 sql문장이 잘못된것 같네요.

    > where절에는 해당자료의 키값만 비교해서 넣어야 되는데 제가 얼핏보기에는 이전에 입력된

    > 거의 모든 필드값을 다 비교하니까 수정한 값이 하나라도 있으면 다시 입력이 되겠죠.

    > 키값이 그렇게 여러개일 가능성은 별로인것 같구요.

    > select절에 들어간 where의 키값비교가 그대로 나중에 update where절에도

    > 들어가야 겠죠.

    > update 테이블명 set 수정되는 필드값 where 절

    >

    >

    님의 답변에 감사드립니다. 제 나름대로 해본다고 한것이 틀렸던것 같네요.



    다시한번 감사드립니다.



    그럼...