Q&A

  • 오라클에서 DELETE 하기

오라클 버전은 9i 이고 ,BDE에서 오라클 설정을 했습니다.
(DLL32 = SQLORA8.DLL, VENDOR = OCI.DLL)

그런데, SELECT, INSERT 는 모두 잘 되는데
DELETE만 하면 DB에 제대로 연결이 안되는지 계속 돌다가 프로그램이
멈춥니다. SQL-EXPLORER에서 해봐도 DELETE만 안되는 걸 보면 연결이 안되는 것 같기도 하구요. --;

그리고, 델파이를 다시 시작해야 오라클DB의 변경된 값이 적용이 됩니다.
예를 들어서, 프로그램을 한번 컴파일해서 수행하고 난 뒤에 SQL-PLUS에서 A라는 테이블의 데이타 한건을 삭제했는데 다시 컴파일하면 삭제 전의 건수를 리턴하거든요.

다음은 코드입니다. 답변 좀 해주세요~ ㅜ.ㅜ


with DM_CreateF.Query_Common do
  begin
       SQL.Clear;
       SQL.Add('SELECT TO_CHAR(SYSDATE, ''YYYYMMDD'')CURRDATE FROM DUAL');
       Open;
       curr_date := FieldByName('CURRDATE').AsString;
  end;

  with DM_CreateF do
  begin
     try
        Query_J010T.ParamByName('RESIGNDATE').AsString := curr_date;
        Query_J010T.Open;

        if Query_J010T.isEmpty then
        begin
            Query_J010T.Close;
        end
        else
        begin
            Database_ORA.StartTransaction;
            
           // DELETE
            with Query_Common do
            begin
                 SQL.Clear;
                 SQL.Add('SELECT COUNT(*) FROM DHRU010T');
                 Open;
                 showmessage(inttostr(Fields[0].AsInteger));
                 if Fields[0].AsInteger <> 0 then
                 begin
                     SQL.Clear;
                     SQL.Add('DELETE FROM DHRU010T ');
                     ExecSQL;    //<-- 이 부분에서 프로그램이 멈춥니다.
                 end;
            end;

            Query_J010T.First;
            while not Query_J010T.EOF do
            begin
                 for i:=0 to Query_J010T.FieldCount-1 do
                 begin
                         Query_U010T.Params[i].AsString := Query_J010T.Fields[i].AsString;
                 end;
                 Query_U010T.ExecSQL; //insert
                 Query_J010T.Next;
            end;

            Database_ORA.Commit;
        end;  //if-else end

     except
       Database_ORA.Rollback;
       MessageDlg('접속상태 불량으로 종료합니다!', mtWarning, [mbok], 0);
     end;
  end;
4  COMMENTS
  • Profile
    KDDG_ZZOM 2003.05.22 06:27
    지우려는 테이블의 건수가 얼마나 되나요?
    조건없이 지우는것같은데...
    데이타건수가 많으면 롤백테이블스테이스가 그만큼커야되는데...^^

    즐프하세요..
  • Profile
    서영지 2003.05.22 18:49
    두 테이블의 전체 데이타를 지워야하는데요,
    한 테이블은 700건 정도, 한 테이블은 1400건 정도예요.

    롤백테이블 스페이스를 얼마나 크게 잡아줘야할까요? ㅜ.ㅜ


  • Profile
    아폴론 2003.05.22 22:24
    SQL.ADD('Delete from TESTDB');
    이넘은 파라독스나 where 절과 함게 사용하고요

    오라클 테이블을 완전히 지울때는
    SQL.ADD('Truncate Table TestDB');
    ExecSQL;
    이리 해야 됩니다.
  • Profile
    KDDG_ZZOM 2003.05.22 19:25
    700,1400이면 한번에 지울수도 있을것같은데...
    우선 롤백테이블스페이스가 얼마나 잡혀있는지 확인해보세요...
    그리고 업무적으로 한번에 얼마나큰 트랜잭션이 일어날수 있는지도요...
    서버와 디스크가 빵빵하면 크게 잡아도 되지만...

    즐프하세요....