이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 41.7. 스포츠 토토버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

23.7. 무지개 토토

전체 쿼리를 한 번에 실행하는 대신 다음을 수행할 수 있습니다. 설정하다무지개 토토다음을 캡슐화합니다. 쿼리를 수행한 다음 쿼리 결과를 한 번에 몇 행씩 읽습니다. 하나 이렇게 하는 이유는 결과가 나올 때 메모리 오버런을 방지하기 위해서입니다. 많은 수의 행이 포함되어 있습니다. (단,PL/pgSQL사용자는 일반적으로 걱정할 필요가 없습니다. FOR 루프는 자동으로 내부적으로 무지개 토토를 사용하기 때문에 메모리 문제를 피하기 위해.) 더 흥미로운 가능성은 함수는 자신이 설정한 무지개 토토에 대한 참조를 반환할 수 있습니다. 호출자가 행을 읽을 수 있도록 허용합니다. 이는 다음 중 한 가지 방법을 제공합니다. 함수에서 행 집합을 반환합니다.

23.7.1. 무지개 토토 선언 변수

다음 무지개 토토에 대한 모든 접근PL/pgSQL무지개 토토 변수를 통과하고, 항상 특수 데이터 유형입니다.반환자. 무지개 토토 변수를 생성하는 한 가지 방법은 다음과 같습니다. 유형의 변수로 선언하기만 하면 됩니다.반환자. 또 다른 방법은 무지개 토토를 사용하는 것입니다. 일반적으로 선언 구문은 다음과 같습니다.

이름무지개 토토 [ ( 인수 ) ] FORselect_query ;

(for다음으로 대체될 수 있음ISOracle 호환성을 위해.)인수(있는 경우)은 쉼표로 구분됩니다. 목록이름 데이터 유형이름을 정의하는 쌍 해당 쿼리의 매개변수 값으로 대체됩니다. 실제 이 이름을 대체할 값은 나중에 지정됩니다. 무지개 토토가 열릴 때.

일부 예:

선언하다
    curs1 재귀사자;
    curs2 선택을 위한 무지개 토토 * tenk1에서;
    curs3 CURSOR(key int) IS SELECT * from tenk1 여기서 고유1 = 키;

이 세 변수는 모두 다음 데이터 유형을 가집니다.반환자, 그러나 첫 번째는 어떤 용도로든 사용할 수 있습니다. 쿼리, 두 번째 쿼리에는 이미 완전히 지정된 쿼리가 있습니다.바운드그리고 마지막에는 매개변수화된 쿼리가 바인딩되어 있습니다. (무지개 토토가 있을 때 정수 매개변수 값으로 대체됩니다. 열립니다.) 변수curs1말씀하셨습니다 될 것이다언바운드다음에 바인딩되어 있지 않기 때문에 특정 쿼리.

23.7.2. 무지개 토토 열기

무지개 토토를 사용하여 행을 검색하려면 먼저 무지개 토토를 사용해야 합니다.열림. (이것은 동등한 조치입니다. SQL 명령에무지개 토토 선언.) PL/pgSQL네 가지 형태의 OPEN 문(그 중 두 개는 바인딩되지 않은 무지개 토토와 함께 사용됨) 변수와 바인딩된 무지개 토토와 함께 사용하기 위한 나머지 두 개 변수.

23.7.2.1. 선택 가능

열기언바운드 무지개 토토선택을 위해 ...;

무지개 토토 변수가 열리고 지정된 값이 제공됩니다. 실행할 쿼리입니다. 무지개 토토는 이미 열 수 없으며 바인딩되지 않은 무지개 토토로 선언되어야 합니다(즉, 간단하다반환자변수). 셀렉트 쿼리는의 다른 SELECT와 동일한 방식으로 처리됩니다.PL/pgSQL: PL/pgSQL변수 이름이 대체됨 for이며 쿼리 계획은 재사용이 가능하도록 캐시됩니다.

선택을 위해 curs1 열기 * FROM foo WHERE 키 = mykey;

23.7.2.2. 실행 가능

열기언바운드 무지개 토토실행용쿼리-문자열;

무지개 토토 변수가 열리고 지정된 값이 제공됩니다. 실행할 쿼리입니다. 무지개 토토는 이미 열 수 없으며 바인딩되지 않은 무지개 토토로 선언되어야 합니다(즉, 간단하다반환자변수). 쿼리 와 같은 방식으로 문자열 표현식으로 지정됩니다. EXECUTE 명령. 평소와 같이 이는 다음에 대한 유연성을 제공합니다. 실행마다 달라지는 쿼리입니다.

''SELECT * FROM'' 실행을 위해 curs1 열기 || quote_ident($1);

23.7.2.3. 바운드 무지개 토토 열기

열기바운드 무지개 토토 [ ( argument_values ) ];

이 OPEN 형식은 무지개 토토 변수를 여는 데 사용됩니다. 쿼리가 선언될 때 쿼리가 바인딩되었습니다. 무지개 토토는 할 수 없습니다 이미 열려있어. 실제 인수 값 표현식 목록 무지개 토토가 다음을 사용하도록 선언된 경우에만 나타나야 합니다. 인수. 이러한 값은 쿼리로 대체됩니다. 바인딩된 무지개 토토에 대한 쿼리 계획은 항상 고려됩니다. 캐시 가능 --- 여기에는 EXECUTE와 동등한 기능이 없습니다. 경우.

OPEN curs2;
OPEN curs3(42);

23.7.3. 무지개 토토 사용

무지개 토토가 열리면 다음을 사용하여 조작할 수 있습니다. 여기에 설명된 진술입니다.

이러한 조작은 동일한 기능에서 발생할 필요는 없습니다. 처음부터 무지개 토토를 열었습니다. 다음을 반환할 수 있습니다.반환자함수에서 값을 꺼내고 호출자는 무지개 토토에 대해 작업합니다. (내부적으로, a반환자값은 단순히 문자열 이름입니다. 무지개 토토에 대한 활성 쿼리가 포함된 포털입니다. 이 이름 전달되거나 다른 사람에게 할당될 수 있습니다.반환자변수 등을 방해하지 않고 포털.)

모든 포털은 트랜잭션이 끝나면 암시적으로 닫힙니다. 그러므로 a반환자값은 다음에 유용합니다. 열린 무지개 토토를 끝까지 참조하십시오. 거래.

23.7.3.1. 술책

가져오기무지개 토토INTO대상;

FETCH는 무지개 토토에서 다음 행을 검색하여 대상은 행 변수, 레코드 변수 또는 SELECT와 마찬가지로 쉼표로 구분된 단순 변수 목록 안으로. SELECT INTO와 마찬가지로 특수 변수 FOUND는 다음과 같습니다. 행을 얻었는지 여부를 확인했습니다.

FETCH curs1 INTO rowvar;
curs2를 foo,bar,baz로 가져옵니다.

23.7.3.2. 닫기

닫기무지개 토토;

CLOSE는 열린 무지개 토토 아래에 있는 포털을 닫습니다. 이 종료되기 전에 리소스를 해제하는 데 사용할 수 있습니다. 트랜잭션 또는 열려는 무지개 토토 변수를 비우기 위해 또.

CLOSE curs1;