홍동길 3월 9일에 포스트됨 공유하기 3월 9일에 포스트됨 안녕하세요. 델파이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; 와 같은 식으로 사용하는 방법으로 테스트했습니다. 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
0 c2design 3월 10일에 포스트됨 공유하기 3월 10일에 포스트됨 FireDAC 에서 RecordCount 는 아래 링크를 참조 하시면 되는데 델파이7은 20년도 더 된 워낙 오래된 버전이라 어떨지 모르겠네요. 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
질문
홍동길
안녕하세요.
델파이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
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.