선언 - 커서 정의
선언이름
[바이러스] [무감각] [[아니요] 스크롤] 배트맨 토토 [with | hold]없이쿼리
선언
사용자는 커서를 만들 수 있습니다.이를 통해 큰 쿼리에서 한 번에 적은 수의 행을 검색하는 데 사용할 수 있습니다. 커서가 만들어지면를 사용하여 행에서 행을 가져옵니다.fetch.
이 페이지에서는 SQL 명령 레벨에서 커서의 사용법을 설명합니다. a 내부의 커서를 사용하려는 경우pl/pgsql함수, 규칙이 다릅니다 - 참조PostgreSQL : 문서 : 11 : 43.7. 윈 토토.
이름
생성 될 커서의 이름.
binary
배트맨 토토가 텍스트 형식이 아닌 이진으로 데이터를 반환하게합니다.
무감각
배트맨 토토에서 검색된 데이터는 배트맨 토토가 생성 된 후 발생하는 배트맨 토토의 기본 표에 대한 업데이트로 영향을받지 않아야 함을 나타냅니다. 안에PostgreSQL, 이것은 기본 동작입니다. 따라서이 핵심 단어는 영향을 미치지 않으며 SQL 표준과의 호환성 만 허용됩니다.
스크롤
스크롤 없음
스크롤
커서를 사용하여 비 순차적 인 방식으로 행을 검색하는 데 사용될 수 있음을 지정합니다 (예 : 뒤로). 쿼리 실행 계획의 복잡성에 따라 지정스크롤
쿼리의 실행 시간에 성능 페널티를 부과 할 수 있습니다.스크롤 없음
커서를 사용하지 않도록 지정합니다. 기본값은 경우에 따라 스크롤을 허용하는 것입니다. 이것은 지정하는 것과 동일하지 않습니다스크롤
. 보다노트자세한 내용.
with Hold
hold
with Hold
트랜잭션이 성공적으로 저지른 트랜잭션 후 배트맨 토토를 계속 사용할 수 있음을 지정합니다.홀드없이
CURSOR를 트랜잭션 외부에서 사용할 수 없음을 지정합니다. 둘 다홀드없이
NORwith Hold
지정되어 있습니다.hold
기본값입니다.
쿼리
키워드BINAGE
, 무감각
및스크롤
어떤 순서로든 나타날 수 있습니다.
일반 배트맨 토토 텍스트 형식으로 데이터를 반환합니다.select
생산할 것입니다. 그만큼BINAGE
옵션은 커서가 이진 형식으로 데이터를 반환해야한다고 지정합니다. 이는 플랫폼 의존적 이진 데이터 형식을 다루기위한 더 많은 프로그래머 노력의 비용으로 서버와 클라이언트의 전환 노력을 줄입니다. 예를 들어, 쿼리가 정수 열에서 하나의 값을 반환하면 문자열이 나타납니다.1
기본 배트맨 토토가있는 반면, 이진 배트맨 토토를 사용하면 값의 내부 표현을 포함하는 4 바이트 필드를 얻을 수 있습니다 (대규모 바이트 순서)..
이진 배트맨 토토를 신중하게 사용해야합니다. 를 포함한 많은 응용 프로그램PSQL, 이진 배트맨 토토를 처리 할 준비가되어 있지 않으며 데이터가 텍스트 형식으로 돌아올 것으로 기대합니다.
클라이언트 응용 프로그램이 사용하는 경우“확장 쿼리”A 발행 프로토콜fetch
명령, BIND 프로토콜 메시지는 데이터를 텍스트 또는 이진 형식으로 검색할지 여부를 지정합니다. 이 선택은 커서가 정의되는 방식을 무시합니다. 이진 커서의 개념은 확장 쿼리 프로토콜을 사용할 때 쓸모 없다 - 모든 커서는 텍스트 또는 이진으로 취급 될 수있다.
그렇지 않으면with Hold
지정되어 있으며,이 명령에 의해 생성 된 커서는 현재 트랜잭션 내에서만 사용할 수 있습니다. 따라서,선언
없음with Hold
트랜잭션 블록 외부에서는 쓸모가 없습니다. 배트맨 토토는 성명서의 완료에서만 살아남을 것입니다. 그러므로PostgreSQL해당 명령이 트랜잭션 블록 외부에서 사용되는 경우 오류를보고합니다. 사용시작and커밋(또는롤백) 트랜잭션 블록을 정의하려면
ifwith Hold
지정되고 배트맨 토토를 생성 한 트랜잭션이 성공적으로 저지르면 동일한 세션에서 후속 트랜잭션으로 배트맨 토토에 계속 액세스 할 수 있습니다. (그러나 생성 트랜잭션이 중단되면 배트맨 토토가 제거됩니다.)with Hold
명시 적으로 닫혀닫기
명령이 발행되거나 세션이 종료됩니다. 현재 구현에서, HELD CURSOR로 표시되는 행은 임시 파일 또는 메모리 영역으로 복사되어 후속 거래에 사용할 수있게됩니다.
with Hold
쿼리에 포함될 때 지정되지 않을 수 있습니다업데이트
또는공유
.
the스크롤
뒤로 가져 오는 데 사용될 커서를 정의 할 때 옵션을 지정해야합니다. 이것은 SQL 표준에 필요합니다. 그러나 이전 버전과의 호환성을 위해PostgreSQL없이 후진 페치를 허용합니다스크롤
, 커서의 쿼리 계획이이를 지원하기 위해 추가 오버 헤드가 필요하지 않을 정도로 간단한 경우. 그러나 애플리케이션 개발자는 생성되지 않은 커서의 역방향 페치를 사용하는 데 의존하지 않는 것이 좋습니다.스크롤
. 만약에스크롤 없음
지정되어 있으면 어떤 경우에도 뒤로 페치가 허용되지 않습니다.
쿼리에 포함될 때 후진 페치도 허용되지 않습니다업데이트
또는공유
; 그러므로스크롤
이 경우에 지정되지 않을 수 있습니다.
스크롤 가능한 커서가 휘발성 기능을 호출하면 예상치 못한 결과를 줄 수 있습니다 (참조Postgresql: Tài liệu: 11: 38.7. Các loại biến độ토토 chức nă토토). 이전에 가져온 행을 다시 가져 오면 함수가 다시 실행 될 수 있으며, 아마도 처음과 다른 결과를 초래할 수 있습니다. 지정하는 것이 가장 좋습니다스크롤 없음
휘발성 기능과 관련된 쿼리의 경우. 그것이 실용적이지 않은 경우, 하나의 해결 방법은 커서를 선언하는 것입니다hold로 스크롤
그로부터 행을 읽기 전에 거래를 커밋하십시오. 이렇게하면 커서의 전체 출력이 임시 저장소에서 구체화되므로 각 행에 대해 휘발성 함수가 정확히 한 번 실행됩니다.
커서의 쿼리에 포함 된 경우업데이트
또는공유
, 그리고 정기적 인 것과 같은 방식으로 처음 가져 오는 시점에 반환 된 행이 잠겨 있습니다select이러한 옵션을 사용하여 명령하십시오. 또한, 반환 된 행은 최신 버전이 될 것입니다. 따라서 이러한 옵션은 SQL 표준이 a 호출하는 것과 동등한 것을 제공합니다.“민감한 배트맨 토토”. (지정무감각
함께업데이트
또는for share
는 오류입니다.)
일반적으로 사용하는 것이 좋습니다업데이트
배트맨 토토가 사용하려는 경우업데이트 ... 현재의 현재
또는삭제 ... 전류의 위치
. 사용업데이트
가져 오는 시간과 업데이트 된 시간 사이에 다른 세션이 행을 변경하는 것을 방지합니다. 없이업데이트
, 후속현재의 전류
배트맨 토토가 만들어진 후 행이 변경되면 명령이 영향을 미치지 않습니다.
사용해야 할 또 다른 이유업데이트
그없이 후속현재의 전류
커서 쿼리가 SQL 표준의 규칙을 충족하지 않으면 실패 할 수 있습니다“간단히 업데이트 가능한”(특히 커서는 하나의 테이블 만 참조해야하며 그룹화 또는 사용하지 않아야합니다.주문 by
). 단순히 업데이트 할 수없는 커서는 계획 선택 세부 사항에 따라 작동하거나 그렇지 않을 수 있습니다. 따라서 최악의 경우 응용 프로그램은 테스트에 작동 한 다음 생산에 실패 할 수 있습니다. 만약에업데이트
지정되어 있으며 커서는 업데이트 가능합니다.
사용하지 않는 주된 이유업데이트
with현재의 전류
커서를 스크롤 가능하거나 후속 업데이트에 둔감 해야하는 경우 (즉, 이전 데이터를 계속 표시합니다). 이것이 요구 사항이라면 위에 표시된 경고에 가까운주의를 기울이십시오.
SQL 표준은 임베디드의 배트맨 토토에 대한 조항 만 제시합니다SQL. 그만큼PostgreSQL서버가 구현되지 않습니다Open
커서에 대한 진술; 커서는 선언 될 때 열린 것으로 간주됩니다. 하지만,ECPG, 임베디드 SQL 사전 처리기를위한PostgreSQL, 관련된 것들을 포함하여 표준 SQL 커서 규칙을 지원합니다선언
및Open
진술.
쿼리를 통해 사용 가능한 모든 커서를 볼 수 있습니다pg_cursors
시스템보기
SQL 표준에 따르면 커서가 기본적으로 기본 데이터의 동시 업데이트에 민감한 지 여부는 구현에 따라 다릅니다. 안에postgresql, 배트맨 토토는 기본적으로 둔감하며 지정하여 민감하게 만들 수 있습니다업데이트
. 다른 제품은 다르게 작동 할 수 있습니다.
SQL 표준은 내장 된 상태에서만 커서를 허용합니다SQL및 모듈.PostgreSQL배트맨 토토를 대화식으로 사용하도록 허용합니다.
이진 배트맨 토토는입니다.PostgreSQL확장.