안녕하십니까?
질문이 있어 글을 올립니다.
프로젝트를 하던중 다음과 같은 문제를 접하게 되었습니다.
해결방안들을 제시하여 주시기 바랍니다.
먼저. 하기의 sql문을 보시기 바랍니다.
// 변수 받기
custtemp := custtemp +
DBGrid1.DataSource.DataSet.FieldByName('cust_no').AsString + '''' + ',' +
'''';
sBscd := Trim(Copy(Bsnm_CBBX.Text,Length(Bsnm_CBBX.Text)-2,3));
sCalcyymm := copy(Prtdt_Medt.Text,1,6);
sSvccd :=
trim(DBGrid1.DataSource.DataSet.FieldByName('svc_cd').AsString);
sCalcdivcd :=
trim(DBGrid1.DataSource.DataSet.FieldByName('calc_div_cd').AsString);
sCurrmmdiv :=
trim(DBGrid1.DataSource.DataSet.FieldByName('curr_mm_div').AsString);
sYymmdd := FormatDateTime('YYYYMMDD', now);
// 트랜잭션 처리부
With DMYF.QryYG_1 do begin
try
Close;
SQL.Clear;
SQL.Add('update ctb_jiro_trans ');
SQL.Add('set sam_creat_dt = :sYymmdd ');
SQL.Add('where station_no = :sBscd ');
SQL.Add('and cust_no in (''' + custtemp + ''') ');<--- 이부분을 주의해서 봐주길 바람.
SQL.Add('and calc_yymm = :sCalcyymm ');
SQL.Add('and svc_cd = :sSvccd ');
SQL.Add('and calc_div_cd = :sCalcdivcd ');
SQL.Add('and curr_mm_div = :sCurrmmdiv ');
file://파라미터 처리부
ParamByName('sBscd').AsString := sBscd;
ParamByName('sCalcyymm').AsString := sCalcyymm;
ParamByName('sSvccd').AsString := sSvccd;
ParamByName('sCalcdivcd').AsString := sCalcdivcd;
ParamByName('sCurrmmdiv').AsString := sCurrmmdiv;
ParamByName('sYymmdd').AsString := sYymmdd;
Execsql;
Except
close;
Application.MessageBox(gMsgErrUpdate,'CIMS',MB_OK+MB_ICONERROR);
Exit;
end;
end;
코딩내용 : 각 조건값들을 가질경우 테이블에서 unique한 레코드를 찾아 내어 update하게 코딩하였음.
처리 예 1 : 50 건 처리시 이상없이 update가 이루어짐..
즉 custtemp에 50건의 가입자번호가 들어갈시 이상없이 처리됨,
처리 예2 : 1000건 이상 처리시 update가 이루어지지 않고 에러 발생
즐 except 문이 수행됨.
에러 내용 : ora - 01975
즉 custtemp의 값이 1000건 이상을 처리할 수 없다고 함.
이러한 경우 unique한 레코드를 찾아내어 1000건이상 update를 하기 위한 방법을
알려주시기 바랍니다.
초보가 글올림...^^
> 안녕하십니까?
>
> 질문이 있어 글을 올립니다.
>
> 프로젝트를 하던중 다음과 같은 문제를 접하게 되었습니다.
>
> 해결방안들을 제시하여 주시기 바랍니다.
>
> 먼저. 하기의 sql문을 보시기 바랍니다.
>
> // 변수 받기
> custtemp := custtemp +
> DBGrid1.DataSource.DataSet.FieldByName('cust_no').AsString + '''' + ',' +
> '''';
>
> sBscd := Trim(Copy(Bsnm_CBBX.Text,Length(Bsnm_CBBX.Text)-2,3));
> sCalcyymm := copy(Prtdt_Medt.Text,1,6);
> sSvccd :=
> trim(DBGrid1.DataSource.DataSet.FieldByName('svc_cd').AsString);
> sCalcdivcd :=
> trim(DBGrid1.DataSource.DataSet.FieldByName('calc_div_cd').AsString);
> sCurrmmdiv :=
> trim(DBGrid1.DataSource.DataSet.FieldByName('curr_mm_div').AsString);
> sYymmdd := FormatDateTime('YYYYMMDD', now);
>
> // 트랜잭션 처리부
> With DMYF.QryYG_1 do begin
> try
> Close;
> SQL.Clear;
> SQL.Add('update ctb_jiro_trans ');
> SQL.Add('set sam_creat_dt = :sYymmdd ');
> SQL.Add('where station_no = :sBscd ');
> SQL.Add('and cust_no in (''' + custtemp + ''') ');<--- 이부분을 주의해서 봐주길 바람.
> SQL.Add('and calc_yymm = :sCalcyymm ');
> SQL.Add('and svc_cd = :sSvccd ');
> SQL.Add('and calc_div_cd = :sCalcdivcd ');
> SQL.Add('and curr_mm_div = :sCurrmmdiv ');
>
> file://파라미터 처리부
> ParamByName('sBscd').AsString := sBscd;
> ParamByName('sCalcyymm').AsString := sCalcyymm;
> ParamByName('sSvccd').AsString := sSvccd;
> ParamByName('sCalcdivcd').AsString := sCalcdivcd;
> ParamByName('sCurrmmdiv').AsString := sCurrmmdiv;
> ParamByName('sYymmdd').AsString := sYymmdd;
>
> Execsql;
>
> Except
> close;
> Application.MessageBox(gMsgErrUpdate,'CIMS',MB_OK+MB_ICONERROR);
> Exit;
> end;
> end;
>
>
> 코딩내용 : 각 조건값들을 가질경우 테이블에서 unique한 레코드를 찾아 내어 update하게 코딩하였음.
>
>
> 처리 예 1 : 50 건 처리시 이상없이 update가 이루어짐..
> 즉 custtemp에 50건의 가입자번호가 들어갈시 이상없이 처리됨,
>
> 처리 예2 : 1000건 이상 처리시 update가 이루어지지 않고 에러 발생
> 즐 except 문이 수행됨.
>
> 에러 내용 : ora - 01975
> 즉 custtemp의 값이 1000건 이상을 처리할 수 없다고 함.
>
> 이러한 경우 unique한 레코드를 찾아내어 1000건이상 update를 하기 위한 방법을
> 알려주시기 바랍니다.
>
> 초보가 글올림...^^
>
>
>