Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

TQuery.RecordCount 프로퍼티 기능 관련 문의


홍동길

질문

안녕하세요.

델파이7에서 TQuery.RecordCount 프로퍼티 관련하여 문의드립니다.

오라클 DB를 11 -> 19로 변경하면서 기존에는 recordcount로 조회 건수를 사용하던게 정상적으로 동작하지 않는 문제를 발견하였고, 검색을 해 본 결과 recordcount가 remote database에 대해서는

조회건수 리턴을 보장하지 않고, 정상적으로 조회 건수를 가져오려면 TQuery.Last를 호출하고 나서 recordcount를 사용해야 한다는 점을 알았습니다.

해결책은 알았지만 궁금증은 남았는데요.

 

1. 19c 내에서 테이블에 따른 RecordCount 동작 차이

Last 호출 없이 TQuery.RecordCount 프로퍼티에 접근했을때 동일한 오라클 19c 데이터베이스이지만 어떤 테이블은 조회건수를 알려주고 어떤 테이블은 조회건수를 -1로 리턴한다는 점입니다.

예를 들면 보통의 사용자 테이블을 tquery로 조회 한 후 recordcount를 읽으면 최초 읽은 레코드 이후로 다른 레코드를 계속 fetch하는게 sql monitor에 보입니다.

그래서 Last 호출 없이도 recordcount가 조회건수를 리턴하는것으로 짐작되고요

그런데 오라클의 딕셔너리 뷰인 user_tables 테이블을 조회하면 recordcount를 읽어도 최초 읽어온 레코드 이후의 레코드를 fetch하지 않습니다.

 

2. 11g vs 19c 버전 차이에 따른 RecordCount 동작 차이

오라클 11g에 접속해서 아래 코드를 실행하면 recordcount가 정상적으로 리턴되는데 19c에 접속해서 아래 코드를 실행하면 recordcount = -1을 리턴합니다.

Tquery.clear;

Tquery.Add(select * from user_tables)

Tquery.Open;

ShowMessage(InttoStr(Tquery.RecordCount));

 

PC에 설치된 오라클 클라이언트를 이것저것 변경해봐도 코드 동작에 변화가 없는것으로 봐서는 서버 버전에 따른 차이인것으로 짐작됩니다.

기술적으로 왜 저런 차이가 발생하는지 궁금한데 혹시 원인을 아시거나 짐작가는 바라도 의견을 나눠주신다면 감사하겠습니다.

 

PS.

해결책이 궁금한것은 아닙니다.

Last를 먼저 호출하고 RecordCount에 접근하거나

select count(*) from table_a; 와 같은 식으로 사용하는 방법으로 테스트했습니다.

이 댓글 링크
다른 사이트에 공유하기

1 answer to this question

Recommended Posts

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.