개발 버전 :Devel
지원되지 않는 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

선언

선언 - 커서 정의

시놉시스

선언이름[BANIAR] [ASENSETIVE | 무감각] [[아니요] 스크롤]쿼리

설명

선언사용자는 커서를 만들 수 있습니다.이를 통해 더 큰 쿼리에서 한 번에 적은 수의 행을 검색하는 데 사용할 수 있습니다. 커서가 만들어지면를 사용하여 행에서 행을 가져옵니다.fetch.

Note

이 페이지에서는 SQL 명령 레벨에서 커서의 사용법을 설명합니다. a 내부의 커서를 사용하려는 경우pl/pgsql함수, 규칙이 다릅니다 - 참조섹션 41.7.

매개 변수

이름

생성 될 커서의 이름. 세션에서 다른 활성 커서 이름과는 다른 것입니다.

Binary

토토 결과가 텍스트 형식이 아닌 이진으로 데이터를 반환하게합니다.

Asensentive
무감각

커서 감도는 커서가 선언 된 후 동일한 트랜잭션에서 수행 된 커서의 기본 데이터 변경이 커서에서 볼 수 있는지 여부를 결정합니다.무감각그들이 보이지 않음을 의미합니다.Asensentive는 동작이 구현에 의존한다는 것을 의미합니다. 세 번째 행동,민감한, 이러한 변경 사항은 토토 결과에서 볼 수 없으며에서 사용할 수 없습니다.PostgreSQL. 안에PostgreSQL, 모든 커서는 무감각합니다. 따라서이 핵심 단어는 영향을 미치지 않으며 SQL 표준과의 호환성 만 허용됩니다.

지정무감각함께업데이트또는share오류입니다.

스크롤
스크롤 없음

스크롤커서를 사용하여 비 순차적 인 방식으로 행을 검색하는 데 사용될 수 있음을 지정합니다 (예 : 뒤로). 쿼리 실행 계획의 복잡성에 따라 지정스크롤쿼리의 실행 시간에 성능 페널티를 부과 할 수 있습니다.스크롤 없음커서를 비 순위행 방식으로 행을 검색하는 데 사용될 수 없음을 지정합니다. 기본값은 경우에 따라 스크롤을 허용하는 것입니다.스크롤. 보다노트자세한 내용은 아래에 있습니다.

with hold
홀드없이

with hold트랜잭션이 성공적으로 저지른 트랜잭션 후 커서를 계속 사용할 수 있음을 지정합니다.홀드없이CURSOR를 트랜잭션 외부에서 사용할 수 없음을 지정합니다. 둘 다홀드없이NORwith hold지정되어 있습니다.홀드없이기본값입니다.

쿼리

A select또는토토 결과가 반환 할 행을 제공하는 명령.

키워드Asensentive, Binary, 무감각스크롤어떤 순서로든 나타날 수 있습니다.

노트

일반 토토 결과 텍스트 형식으로 데이터를 반환합니다.select생산할 것입니다. 그만큼Binary옵션은 커서가 이진 형식으로 데이터를 반환해야한다고 지정합니다. 이는 플랫폼 의존적 이진 데이터 형식을 다루기위한 더 많은 프로그래머 노력의 비용으로 서버와 클라이언트의 전환 노력을 줄입니다.1기본 토토 결과가있는 반면, 이진 토토 결과를 사용하면 값의 내부 표현을 포함하는 4 바이트 필드 (대기업 바이트 순서)..

이진 토토 결과를 신중하게 사용해야합니다. 를 포함한 많은 응용 프로그램PSQL, 이진 토토 결과를 처리 할 준비가되어 있지 않으며 데이터가 텍스트 형식으로 돌아올 것으로 기대합니다.

Note

클라이언트 응용 프로그램이 사용하는 경우확장 쿼리a를 발행하는 프로토콜fetch명령, BIND 프로토콜 메시지는 데이터를 텍스트 또는 이진 형식으로 검색할지 여부를 지정합니다. 이 선택은 커서가 정의되는 방식을 무시합니다.

with hold지정되어 있으며,이 명령에 의해 생성 된 커서는 현재 트랜잭션 내에서만 사용할 수 있습니다. 따라서,선언없음with hold는 트랜잭션 블록 외부에서 쓸모가 없습니다 : 토토 결과는 성명서의 완료에서만 살아남을 것입니다. 그러므로PostgreSQL해당 명령이 트랜잭션 블록 외부에서 사용되는 경우 오류를보고합니다. 사용시작and커밋(또는롤백) 트랜잭션 블록을 정의하려면

ifwith hold지정되고 커서를 생성 한 트랜잭션이 성공적으로 저지르면 동일한 세션에서 후속 트랜잭션으로 커서에 계속 액세스 할 수 있습니다. (그러나 생성 트랜잭션이 중단되면 커서가 제거됩니다.)with hold명시 적으로 닫혀닫기명령이 발행되거나 세션이 종료됩니다. 현재 구현에서, HELD CURSOR로 표시되는 행은 임시 파일 또는 메모리 영역으로 복사되어 후속 거래에 사용할 수있게됩니다.

with hold쿼리에 포함될 때 지정되지 않을 수 있습니다업데이트또는share.

the스크롤뒤로 가져 오는 데 사용될 커서를 정의 할 때 옵션을 지정해야합니다. 이것은 SQL 표준에 필요합니다.PostgreSQL스크롤그러나 애플리케이션 개발자는 생성되지 않은 커서의 역방향 페치를 사용하는 데 의존하지 않는 것이 좋습니다.스크롤. 만약에스크롤 없음지정되어 있으면 어떤 경우에도 뒤로 페치가 허용되지 않습니다.

쿼리에 포함될 때 뒤로 페치가 허용되지 않습니다업데이트또는share; 그러므로스크롤이 경우에 지정되지 않을 수 있습니다.

주의

스크롤 가능한 커서가 휘발성 기능을 호출하면 예상치 못한 결과를 줄 수 있습니다 (참조섹션 36.7). 이전에 가져온 행을 다시 가져 오면 함수가 다시 실행 될 수 있으며, 아마도 처음과 다른 결과를 초래할 수 있습니다.스크롤 없음휘발성 함수와 관련된 쿼리의 경우. 그것이 실용적이지 않은 경우, 하나의 해결 방법은 커서를 선언하는 것입니다hold로 스크롤그리고 그로부터 행을 읽기 전에 거래를 커밋하십시오. 이렇게하면 커서의 전체 출력이 임시 저장소에서 구체화되므로 각 행에 대해 휘발성 함수가 정확히 한 번 실행됩니다.

커서의 쿼리에 포함 된 경우업데이트또는share, 그리고 정기적 인 것과 같은 방식으로 처음 가져올 때 returned 행이 잠겨 있습니다select이 옵션을 사용하여 명령하십시오. 또한 반환 된 행은 최신 버전이됩니다.

주의

일반적으로 사용하는 것이 좋습니다업데이트토토 결과가 사용하려는 경우업데이트 ... 현재 위치또는삭제 ... 현재의 위치. 사용업데이트가져 오는 시간과 업데이트 된 시간 사이에 다른 세션이 행을 변경하는 것을 방지합니다. 없이업데이트, 후속현재의 전류토토 결과가 만들어진 후 행이 변경되면 명령이 영향을 미치지 않습니다.

사용해야 할 또 다른 이유업데이트그것 없이는 후속입니다.현재의 전류커서 쿼리가 SQL 표준의 규칙을 충족하지 않으면 실패 할 수 있습니다간단히 업데이트 가능한(특히 커서는 하나의 테이블 만 참조해야하며 그룹화 또는 사용하지 않아야합니다.주문 by). 단순히 업데이트 할 수없는 커서는 계획 선택 세부 사항에 따라 작동하거나 그렇지 않을 수 있습니다.업데이트지정되어 있으며 커서는 업데이트 가능합니다.

사용하지 않는 주된 이유업데이트with현재의 전류커서를 스크롤 가능하거나 동시 업데이트에서 격리 해야하는 경우 (즉, 이전 데이터를 계속 표시합니다). 이것이 요구 사항이라면 위에 표시된 경고에 가까운주의를 기울이십시오.

SQL 표준은 임베디드의 토토 결과에 대한 조항 만 제공SQL. 그만큼PostgreSQL서버가 구현되지 않습니다Open커서에 대한 진술; 커서는 선언 될 때 열린 것으로 간주됩니다.ECPG, 임베디드 SQL 사전 처리기를위한PostgreSQL, 관련된 것들을 포함하여 표준 SQL 커서 규칙을 지원합니다선언andOpen진술.

열린 토토 결과의 기본 서버 데이터 구조를 A라고합니다.포털. 포털 이름은 클라이언트 프로토콜에 노출됩니다. 클라이언트는 포털 이름을 알고있는 경우 열린 포털에서 직접 행을 가져올 수 있습니다.선언, 포털 이름은 커서 이름과 동일합니다.

쿼리를 통해 사용 가능한 모든 커서를 볼 수 있습니다pg_cursors시스템보기

커서를 선언하려면 :

영화에서 Liahona 커서 선언 * From Films;

참조fetch토토 결과 사용의 더 많은 예는

호환성

SQL 표준은 내장 된 상태에서만 커서를 허용합니다SQL및 모듈.PostgreSQL토토 결과를 대화식으로 사용하도록 허용합니다.

SQL 표준에 따르면, 무감각 한 커서에 대한 변경 사항업데이트 ... 현재 위치and삭제 ... 현재의 위치같은 토토 결과에서 진술이 보입니다.PostgreSQL둔감 한 토토 결과에서 보이지 않는다는 점에서 다른 모든 데이터 변경 진술과 마찬가지로이 진술을 취급합니다.

이진 토토 결과는입니다.PostgreSQL확장.

정정 제출

문서에 올바른 것이 없으면 일치하지 않습니다.이 양식문서 문제를보고하려면