| PostgreSQL 9.2.24 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.2 : 토토 사이트 추천 구조 | 위로 | 39장.PL/pgSQL - SQL절차적 언어 | 다음 | |
전체 쿼리를 한 번에 실행하는 대신 다음을 수행할 수 있습니다. 설정하다스포츠 토토 결과다음을 캡슐화합니다. 쿼리를 수행한 다음 쿼리 결과를 한 번에 몇 행씩 읽습니다. 하나 이렇게 하는 이유는 결과가 나올 때 메모리 오버런을 방지하기 위해서입니다. 많은 수의 행이 포함되어 있습니다. (단,PL/pgSQL사용자는 일반적으로 걱정할 필요가 없습니다. 그 이후로for루프 메모리 문제를 피하기 위해 자동으로 내부적으로 스포츠 토토 결과를 사용합니다.) 더 흥미로운 사용법은 스포츠 토토 결과에 대한 참조를 반환하는 것입니다. 호출자가 읽을 수 있도록 함수가 생성되었음을 나타냅니다. 행. 이는 큰 행 세트를 반환하는 효율적인 방법을 제공합니다. 함수에서.
다음 스포츠 토토 결과에 대한 모든 접근PL/pgSQL스포츠 토토 결과 변수를 통과하고, 항상 특수 데이터 유형입니다.반환자. 스포츠 토토 결과 변수를 생성하는 한 가지 방법은 다음과 같습니다. 유형의 변수로 선언하기만 하면 됩니다.반환자. 또 다른 방법은 스포츠 토토 결과를 사용하는 것입니다. 일반적으로 선언 구문은 다음과 같습니다.
이름 [ [아니요] 스크롤] 스포츠 토토 결과 [ ( 인수 ) ] FOR질의;
(for다음으로 대체 가능ISfor오라클호환성.) 만약스크롤이다 지정하면 스포츠 토토 결과는 뒤로 스크롤할 수 있습니다. 만일스크롤 없음지정됨, 뒤로 가져오기가 거부됩니다. 두 사양 모두 나타나지 않으면 역방향 가져오기가 허용되는지 여부는 쿼리에 따라 다릅니다.인수이 지정된 경우 쉼표로 구분된 쌍 목록이름 데이터 유형이름을 정의하는 것은 해당 쿼리의 매개변수 값으로 대체됩니다. 실제 이 이름을 대체할 값은 나중에 지정됩니다. 스포츠 토토 결과가 열릴 때.
일부 예:
선언하다
curs1 재귀사자;
curs2 선택을 위한 스포츠 토토 결과 * tenk1에서;
curs3 CURSOR(키 정수) FOR SELECT * FROM tenk1 WHERE Unique1 = 키;
이 세 변수는 모두 다음과 같은 데이터 유형을 가집니다.반환자, 그러나 첫 번째는 어떤 항목에도 사용할 수 있습니다. 쿼리, 두 번째 쿼리에는 이미 완전히 지정된 쿼리가 있습니다.바운드그리고 마지막에는 매개변수화된 쿼리가 바인딩되어 있습니다. (키스포츠 토토 결과가 있을 때 정수 매개변수 값으로 대체됩니다. 열립니다.) 변수curs1말씀하셨습니다 될 것이다언바운드다음에 바인딩되어 있지 않기 때문에 특정 쿼리.
스포츠 토토 결과를 사용하여 행을 검색하려면 먼저 스포츠 토토 결과를 사용해야 합니다.열림. (이것은 동등한 조치입니다. SQL 명령에스포츠 토토 결과 선언.) PL/pgSQL세 가지 형태의열기문, 그 중 두 개는 다음을 사용합니다. 바인딩되지 않은 스포츠 토토 결과 변수는 바인딩된 스포츠 토토 결과를 사용하는 반면 세 번째 변수는 바인딩된 스포츠 토토 결과를 사용합니다. 변수.
참고:바운드 스포츠 토토 결과 변수도 사용할 수 있습니다 명시적으로 스포츠 토토 결과를 열지 않고,for설명된 진술섹션 39.7.4.
열기unbound_cursorvar [ [아니요] 스크롤] FOR질의;
스포츠 토토 결과 변수가 열리고 지정된 값이 제공됩니다. 실행할 쿼리입니다. 스포츠 토토 결과는 이미 열 수 없으며 바인딩되지 않은 스포츠 토토 결과 변수로 선언되어야 합니다(즉, 간단하게 말하면반환자변수). 쿼리는 다음과 같아야 합니다.선택또는 행을 반환하는 다른 것(예:설명). 쿼리는 동일한 방식으로 처리됩니다. 다른 SQL 명령과 마찬가지로PL/pgSQL: PL/pgSQL변수 이름이 대체됩니다. 재사용이 가능하도록 쿼리 계획이 캐시됩니다. 때PL/pgSQL변수는 스포츠 토토 결과 쿼리로 대체된 값은 대체된 것은 당시에 있었던 것입니다.열기; 이후에 변수를 변경하면 스포츠 토토 결과의 동작에 영향을 주지 않습니다.스크롤그리고스크롤 없음옵션은 바인딩된 스포츠 토토 결과와 동일한 의미를 갖습니다.
예:
선택을 위해 curs1 열기 * FROM foo WHERE 키 = mykey;
열기unbound_cursorvar [ [아니요] 스크롤] 실행용query_string [사용 중표현 [, ... ] ];
스포츠 토토 결과 변수가 열리고 지정된 값이 제공됩니다. 실행할 쿼리입니다. 스포츠 토토 결과는 이미 열 수 없으며 바인딩되지 않은 스포츠 토토 결과 변수로 선언되어야 합니다(즉, 간단하게 말하면반환자변수). 쿼리는 문자열 표현식으로 지정됩니다. 에서와 같은 방식으로실행명령. 다음과 같이 일반적으로 이는 유연성을 제공하므로 쿼리 계획은 다음과 같이 달라질 수 있습니다. 하나는 다음으로 실행됩니다(참조섹션 39.10.2), 이는 또한 변수 대체가 명령 문자열에서는 수행되지 않았습니다. 마찬가지로실행, 매개변수 값을 삽입할 수 있습니다. 동적 명령을 통해사용 중.스크롤그리고아니요 스크롤옵션은 경계와 동일한 의미를 갖습니다. 스포츠 토토 결과.
예:
'SELECT * FROM' 실행을 위해 curs1 열기 || quote_ident(탭 이름)
|| ' WHERE col1 = $1' 키값을 사용함;
이 예에서는 테이블 이름이 쿼리에 삽입됩니다
텍스트적으로는 다음을 사용합니다.quote_ident()경비에 권장됩니다
SQL 주입에 반대합니다. 에 대한 비교 값col1a를 통해 삽입됨사용 중매개변수이므로 인용할 필요가 없습니다.
열기bound_cursorvar [ ( [ 인수_이름 := ] argument_value [, ...] ) ];
이 형태는열기여는 데 사용됩니다. 쿼리가 바인딩된 스포츠 토토 결과 변수 선언했다. 스포츠 토토 결과는 이미 열려 있을 수 없습니다. 실제 목록 인수 값 표현식은 다음과 같은 경우에만 나타나야 합니다. 스포츠 토토 결과가 인수를 취하도록 선언되었습니다. 이러한 값은 쿼리로 대체되었습니다.
바인딩된 스포츠 토토 결과에 대한 쿼리 계획은 항상 고려됩니다. 캐시 가능; 해당하는 것은 없습니다실행이 경우에는. 참고하세요스크롤그리고스크롤 없음다음에 지정할 수 없습니다.열기, 스포츠 토토 결과의 스크롤 동작이 이미 결정되었습니다.
인수 값은 다음 중 하나를 사용하여 전달될 수 있습니다.위치또는이름이표기법. 위치 표기법에서는 모든 인수가 지정됩니다. 순서대로. 명명된 표기법에서 각 인수의 이름은 다음과 같습니다. 다음을 사용하여 지정됨:=분리하다 인수 표현식에서. 함수 호출과 유사합니다. 설명됨PostgreSQL :, 위치와 이름을 함께 사용할 수도 있습니다. 표기법.
예(이것은 스포츠 토토 결과 선언 예를 사용함) 위):
OPEN curs2; OPEN curs3(42); OPEN curs3(key := 42);
바인딩된 스포츠 토토 결과에서 변수 대체가 수행되었기 때문입니다. 쿼리에 값을 전달하는 방법에는 실제로 두 가지가 있습니다. 스포츠 토토 결과: 명시적인 인수를 사용하거나열기또는 암시적으로 a를 참조하여PL/pgSQL변수 쿼리. 단, 바인딩 이전에 선언된 변수만 스포츠 토토 결과가 선언되어 스포츠 토토 결과로 대체됩니다. 어느 쪽이든 전달될 값이 다음 시점에 결정되는 경우열기. 예를 들어, 또 다른 방법은 와 같은 효과를 얻습니다.curs3위의 예는
선언하다
키 정수;
curs4 선택을 위한 스포츠 토토 결과 * tenk1에서 고유1 = 키;
시작
키 := 42;
OPEN curs4;
스포츠 토토 결과가 열리면 다음을 사용하여 조작할 수 있습니다. 여기에 설명된 진술입니다.
이러한 조작은 동일한 기능에서 발생할 필요는 없습니다. 처음부터 스포츠 토토 결과를 열었습니다. 다음을 반환할 수 있습니다.반환자함수에서 값을 꺼내서 호출자는 스포츠 토토 결과에 대해 작업합니다. (내부적으로, a반환자값은 단순히 문자열 이름입니다. 스포츠 토토 결과에 대한 활성 쿼리를 포함하는 소위 포털입니다. 이 이름은 다른 사람에게 전달되거나 할당될 수 있습니다.반환자변수 등을 방해하지 않고 포털.)
모든 포털은 트랜잭션 종료 시 암시적으로 닫힙니다. 그러므로 a반환자값은 다음에 사용할 수 있습니다. 열린 스포츠 토토 결과를 끝까지 참조하십시오. 거래.
가져오기 [ 방향보낸 사람 | 안으로] 스포츠 토토 결과INTO대상;
가져오기다음 행을 검색합니다 행 변수일 수 있는 대상으로 스포츠 토토 결과를 이동합니다. 레코드 변수 또는 쉼표로 구분된 단순 목록 변수, 마찬가지로선택. 만약에 다음 행이 없으면 대상이 NULL로 설정됩니다. 마찬가지로선택, 특수 변수발견여부를 확인할 수 있습니다. 행을 얻었는지 여부.
그방향절은 할 수 있습니다 SQL에서 허용되는 변형 중 하나여야 합니다.가져오기가능한 명령을 제외한 명령 둘 이상의 행을 가져옵니다. 즉, 그럴 수 있습니다다음, 이전, 첫 번째, 마지막, 절대 개수, 상대적 개수, 앞으로또는뒤로. 생략방향이것은 지정과 동일다음. 방향이동이 필요한 값 스포츠 토토 결과가 선언되지 않는 한 뒤로는 실패할 가능성이 높습니다. 다음으로 열렸습니다.스크롤옵션.
스포츠 토토 결과다음 이름이어야 합니다. 에반환자다음을 참조하는 변수 스포츠 토토 결과 포털을 엽니다.
예:
FETCH curs1 INTO rowvar; curs2를 foo, bar, baz로 가져옵니다. curs3에서 마지막으로 x, y로 가져옵니다. curs4에서 x로 상대 -2를 가져옵니다.
이동 [ 방향보낸 사람 | 안으로] 스포츠 토토 결과;
이동없이 스포츠 토토 결과 위치를 변경합니다. 데이터를 검색 중입니다.이동작동 정확히는가져오기명령, 단, 스포츠 토토 결과 위치만 변경하고 스포츠 토토 결과를 반환하지 않습니다. 행이 다음으로 이동되었습니다. 마찬가지로선택, 특수 변수발견될 수 있습니다 이동할 다음 행이 있는지 확인했습니다.
그방향절은 가능 SQL에서 허용되는 변형 중 하나여야 합니다.가져오기명령, 즉다음, 이전, 첫 번째, 마지막, 절대 개수, 상대적 개수, 전체, 앞으로 [ 개수 | 전체] 또는뒤로 [ 개수 | 전체]. 생략방향지정과 동일다음. 방향이동이 필요한 값 스포츠 토토 결과가 선언되지 않는 한 뒤로는 실패할 가능성이 높습니다. 다음으로 열렸습니다.스크롤옵션.
예:
MOVE 스포츠 토토 결과1; curs3에서 마지막으로 이동; curs4에서 상대 -2를 이동합니다. curs4에서 앞으로 2로 이동;
업데이트테이블설정 ... 현재 위치스포츠 토토 결과; 다음에서 삭제:테이블현재 위치스포츠 토토 결과;
스포츠 토토 결과가 테이블 행에 위치하면 해당 행은 다음을 수행할 수 있습니다. 스포츠 토토 결과를 사용하여 행을 식별하여 업데이트하거나 삭제할 수 있습니다. 스포츠 토토 결과의 쿼리가 무엇인지에 대한 제한이 있습니다( 특히, 그룹화 없음)을 사용하는 것이 가장 좋습니다업데이트용스포츠 토토 결과에. 자세한 내용은 참조하세요토토 사이트 추천 : 문서 : 9.2 : 선언참조 페이지.
예:
UPDATE foo SET dataval = myval 현재 현재 curs1;
닫기스포츠 토토 결과;
닫기포탈을 닫습니다 열린 스포츠 토토 결과의 기본. 이는 해제하는 데 사용할 수 있습니다. 트랜잭션이 끝나기 전에 리소스를 확보하거나 스포츠 토토 결과 변수가 다시 열립니다.
예:
CLOSE curs1;
PL/pgSQL함수는 호출자에게 스포츠 토토 결과를 반환합니다. 돌려보내는데 유용해요 여러 행이나 열, 특히 결과가 매우 큰 경우 세트. 이를 위해 함수는 스포츠 토토 결과를 열고 다음을 반환합니다. 호출자에게 스포츠 토토 결과 이름을 알려줍니다(또는 단순히 스포츠 토토 결과를 엽니다). 에 의해 지정되거나 달리 알려진 포털 이름을 사용하여 발신자). 그러면 호출자는 스포츠 토토 결과에서 행을 가져올 수 있습니다. 는 호출자가 스포츠 토토 결과를 닫을 수 있습니다. 그렇지 않으면 스포츠 토토 결과가 닫힙니다. 거래가 종료되면 자동으로 종료됩니다.
스포츠 토토 결과에 사용되는 포털 이름은 다음으로 지정할 수 있습니다. 프로그래머 또는 자동으로 생성됩니다. 포털을 지정하려면 이름을 지정하려면 간단히에 문자열을 할당하면 됩니다.반환자28710_28771반환자변수는 다음과 같습니다 에서 사용됨열기이름으로 기본 포털. 그러나 만약에반환자변수가 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에서 모두 가져오기;
커밋;
다음의 변형이 있습니다.for에 의해 반환된 행을 반복할 수 있는 문 스포츠 토토 결과. 구문은 다음과 같습니다.
[ <<라벨 ] 에 대한recordvarINbound_cursorvar [ ( [ argument_name := ] argument_value [, ...] ) ] 루프문장END 루프 [ 라벨 ];
스포츠 토토 결과 변수는 다음과 같은 쿼리에 바인딩되어 있어야 합니다. 선언되었고, 그것은할 수 없습니다이미 열려있습니다.for문이 자동으로 열립니다. 스포츠 토토 결과를 반환하고 루프가 종료되면 스포츠 토토 결과를 다시 닫습니다. 에이 실제 인수 값 표현식 목록은 다음과 같은 경우에 나타나야 합니다. 스포츠 토토 결과가 인수를 취하도록 선언된 경우에만 가능합니다. 이러한 값 다음과 같은 방식으로 쿼리에서 대체됩니다. 동안열기(참조섹션 39.7.2.3).
변수recordvar이다 자동으로 유형으로 정의됨기록그리고 루프 내부에만 존재합니다(기존 정의 루프 내에서는 변수 이름이 무시됩니다. 반환된 각 행 스포츠 토토 결과는 이 레코드 변수에 연속적으로 할당되고 루프 본문이 실행됩니다.