Q&A

  • 질문제목과 분류를 꼭 해주시길 부탁드립니다.
안녕하십니까?



질문이 있어 글을 올립니다.



프로젝트를 하던중 다음과 같은 문제를 접하게 되었습니다.



해결방안들을 제시하여 주시기 바랍니다.



먼저. 하기의 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를 하기 위한 방법을

알려주시기 바랍니다.



초보가 글올림...^^







1  COMMENTS
  • Profile
    Hyena 2001.02.14 20:03
    Hyena wrote:

    > 안녕하십니까?

    >

    > 질문이 있어 글을 올립니다.

    >

    > 프로젝트를 하던중 다음과 같은 문제를 접하게 되었습니다.

    >

    > 해결방안들을 제시하여 주시기 바랍니다.

    >

    > 먼저. 하기의 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를 하기 위한 방법을

    > 알려주시기 바랍니다.

    >

    > 초보가 글올림...^^

    >

    >

    >