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

36.8. 스포츠 토토 결과

전체 쿼리를 한 번에 실행하는 대신 다음을 수행할 수 있습니다. 설정하다스포츠 토토 결과이것은 쿼리를 수행한 다음 쿼리 결과를 한 번에 몇 행씩 읽습니다. 하나 이렇게 하는 이유는 결과가 나올 때 메모리 오버런을 방지하기 위해서입니다. 많은 수의 행이 포함되어 있습니다. (단,PL/pgSQL사용자는 일반적으로 걱정할 필요가 없습니다. 그 이후로for루프 메모리 문제를 피하기 위해 자동으로 내부적으로 스포츠 토토 결과를 사용합니다.) 더 흥미로운 사용법은 스포츠 토토 결과에 대한 참조를 반환하는 것입니다. 호출자가 읽을 수 있도록 함수가 생성되었음을 나타냅니다. 행. 이는 큰 행 세트를 반환하는 효율적인 방법을 제공합니다. 함수에서.

36.8.1. 스포츠 토토 결과 선언 변수

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

이름스포츠 토토 결과 [ ( 인수 ) ] FOR질의;

(for다음으로 대체될 수 있음ISfor오라클호환성.)인수, 만약 지정됨, 쉼표로 구분된 쌍 목록입니다.이름 데이터 유형이름을 정의하는 것은 해당 쿼리의 매개변수 값으로 대체됩니다. 실제 이 이름을 대체할 값은 나중에 지정됩니다. 스포츠 토토 결과가 열릴 때.

일부 예:

선언하다
    curs1 재귀사자;
    curs2 선택을 위한 스포츠 토토 결과 * tenk1에서;
    curs3 CURSOR(키 정수) IS SELECT * FROM tenk1 WHERE Unique1 = 키;

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

36.8.2. 스포츠 토토 결과 열기

스포츠 토토 결과를 사용하여 행을 검색하려면 먼저 스포츠 토토 결과를 사용해야 합니다.열림. (이것은 동등한 조치입니다. SQL 명령에스포츠 토토 결과 선언.) PL/pgSQL세 가지 형태의열기문 중 두 개는 다음을 사용합니다. 바인딩되지 않은 스포츠 토토 결과 변수는 바인딩된 스포츠 토토 결과를 사용하는 반면 세 번째 변수는 바인딩된 스포츠 토토 결과를 사용합니다. 변수.

36.8.2.1. 다음을 위해 열려 있음 질의

열기unbound_cursorfor질의;

스포츠 토토 결과 변수가 열리고 지정된 값이 제공됩니다. 실행할 쿼리입니다. 스포츠 토토 결과는 이미 열 수 없으며 바인딩되지 않은 스포츠 토토 결과로 선언되어야 합니다(즉, 간단하다반환자변수). 쿼리 이어야 합니다.선택또는 다른 것 행을 반환합니다(예:설명). 쿼리는 다른 SQL 명령과 동일한 방식으로 처리됩니다.PL/pgSQL: PL/pgSQL변수 이름이 대체됩니다. 재사용이 가능하도록 쿼리 계획이 캐시됩니다.

예:

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

36.8.2.2. 실행 가능

열기unbound_cursor실행용query_string;

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

예:

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

36.8.2.3. 바운드 스포츠 토토 결과 열기

열기bound_cursor [ ( argument_values ) ];

이 형태는열기여는 데 사용됩니다. 쿼리가 바인딩된 스포츠 토토 결과 변수 선언했다. 스포츠 토토 결과는 이미 열려 있을 수 없습니다. 실제 목록 인수 값 표현식은 다음과 같은 경우에만 나타나야 합니다. 스포츠 토토 결과가 인수를 취하도록 선언되었습니다. 이러한 값은 쿼리로 대체되었습니다. 바인딩된 스포츠 토토 결과에 대한 쿼리 계획 항상 캐시 가능한 것으로 간주됩니다. 해당하는 것은 없습니다실행이 경우에는.

예:

OPEN curs2;
OPEN curs3(42);

36.8.3. 스포츠 토토 결과 사용

스포츠 토토 결과가 열리면 다음을 사용하여 조작할 수 있습니다. 여기에 설명된 진술입니다.

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

모든 포털은 트랜잭션 종료 시 암시적으로 닫힙니다. 그러므로 a반환자값은 다음에 사용할 수 있습니다. 열린 스포츠 토토 결과를 끝까지 참조하십시오. 거래.

36.8.3.1. 가져오기

가져오기스포츠 토토 결과INTO대상;

가져오기에서 다음 행을 검색합니다. 행 변수일 수 있는 대상으로 스포츠 토토 결과를 이동합니다. 레코드 변수 또는 쉼표로 구분된 단순 목록 변수, 마찬가지로선택. 다음과 같이 와 함께선택, 특집 변수발견확인하여 확인할 수 있습니다. 행을 얻었는지 여부.

예:

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

36.8.3.2. 닫기

닫기스포츠 토토 결과;

닫기포탈을 닫습니다 열린 스포츠 토토 결과의 기본. 이는 해제하는 데 사용할 수 있습니다. 트랜잭션이 끝나기 전에 리소스를 확보하거나 스포츠 토토 결과 변수가 다시 열립니다.

예:

CLOSE curs1;

36.8.3.3. 스포츠 토토 결과 반환

PL/pgSQL함수는 호출자에게 스포츠 토토 결과를 반환합니다. 돌려보내는데 유용해요 여러 행이나 열, 특히 결과가 매우 큰 경우 세트. 이를 위해 함수는 스포츠 토토 결과를 열고 다음을 반환합니다. 호출자에게 스포츠 토토 결과 이름을 알려줍니다(또는 단순히 스포츠 토토 결과를 엽니다). 에 의해 지정되거나 달리 알려진 포털 이름을 사용하여 발신자). 그러면 호출자는 스포츠 토토 결과에서 행을 가져올 수 있습니다. 는 호출자가 스포츠 토토 결과를 닫을 수 있습니다. 그렇지 않으면 스포츠 토토 결과가 닫힙니다. 거래가 종료되면 자동으로 종료됩니다.

스포츠 토토 결과에 사용되는 포털 이름은 다음으로 지정할 수 있습니다. 프로그래머 또는 자동으로 생성됩니다. 포털을 지정하려면 이름을 지정하려면 간단히에 문자열을 할당하면 됩니다.반환자변수를 열기 전에. 문자열 의 값반환자변수는 다음과 같습니다. 에서 사용됨열기이름으로 기본 포털. 그러나 만약에반환자변수가 null입니다.열기자동으로 다음과 같은 이름을 생성합니다. 기존 포털과 충돌하지 않으며 이를 다음 포털에 할당합니다.반환자변수.

참고:바운드 스포츠 토토 결과 변수는 다음으로 초기화됩니다. 이름을 나타내는 문자열 값입니다. 포털 이름은 스포츠 토토 결과 변수 이름과 동일합니다. 프로그래머가 이전에 할당으로 이를 재정의하지 않는 한 스포츠 토토 결과를 엽니다. 그러나 바인딩되지 않은 스포츠 토토 결과 변수 기본값은 초기에 null 값이므로 수신됩니다. 자동으로 생성된 고유 이름. 재정의되었습니다.

다음 예는 스포츠 토토 결과 이름이 될 수 있는 한 가지 방법을 보여줍니다. 호출자가 제공한 것:

CREATE TABLE 테스트(열 텍스트);
테스트 값에 삽입('123');

CREATE FUNCTION reffunc(refcursor)는 refcursor AS '를 반환합니다.
시작
    테스트에서 열 선택을 위해 $1을 엽니다.
    $1를 반환합니다.
끝;
' 언어 plpgsql;

시작하다;
SELECT reffunc('펑스포츠 토토 결과');
funccursor에서 모두 가져오기;
커밋;

다음 예에서는 자동 스포츠 토토 결과 이름을 사용합니다. 세대:

CREATE FUNCTION reffunc2()는 refcursor AS '를 반환합니다.
선언
    참조 참조자;
시작
    SELECT col FROM 테스트에 대한 OPEN 참조;
    반환 참조;
끝;
' 언어 plpgsql;

시작하다;
SELECT reffunc2();

      reffunc2      
-------
 <이름 없는 스포츠 토토 결과 1
(1줄)

"<이름 없는 스포츠 토토 결과 1"에서 모두 가져오기;
커밋;

다음 예는 여러 항목을 반환하는 한 가지 방법을 보여줍니다. 단일 함수의 스포츠 토토 결과:

함수 생성 myfunc(refcursor, refcursor)는 SETOF refcursor를 $$로 반환합니다.
시작
    SELECT * FROM table_1에 대해 $1 열기;
    다음 $1를 반환합니다.
    SELECT * FROM table_2를 위해 $2 열기;
    다음 $2를 반환합니다.
끝;
$$ 언어 plpgsql;

-- 스포츠 토토 결과를 사용하려면 트랜잭션에 있어야 합니다.
시작하다;

SELECT * FROM myfunc('a', 'b');

a에서 모두 가져오기;
b에서 모두 가져오기;
커밋;