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

40.3. 메이저 토토 사이트

블록에 사용된 모든 변수는 블록의 선언 섹션. (유일한 예외는 다음과 같습니다. a의 루프 변수for루프 반복 중 정수 값 범위에 대해 자동으로 다음과 같이 선언됩니다. 정수 변수 및 마찬가지로 a의 루프 변수for커서의 결과를 반복하는 루프는 다음과 같습니다. 자동으로 레코드 변수로 선언됩니다.)

PL/pgSQL변수는 무엇이든 가질 수 있습니다. SQL 데이터 유형(예:정수, varchar문자.

다음은 변수 선언의 몇 가지 예입니다:

user_id 정수;
수량 숫자(5);
URL varchar;
myrow 테이블명%ROWTYPE;
myfield 테이블 이름.열 이름%TYPE;
연속 기록;

변수 선언의 일반적인 구문은 다음과 같습니다:

이름 [상수] 유형 [콜레이트collation_name ] [NULL이 아님] [기본 | :=표현 ];

기본값절이 제공되면 다음을 지정합니다. 블록이 생성될 때 변수에 할당된 초기 값 입력했습니다. 만약기본값절이 아님 주어진 다음 변수는 다음으로 초기화됩니다.SQL널 값.상수옵션은 변수가 초기화 후에 할당되어 해당 값이 유지됩니다. 블록 기간 동안 일정합니다.콜레이트옵션은 다음에 사용할 데이터 정렬을 지정합니다. 변수(참조섹션 40.3.6). 만일NULL이 아님이 지정되었습니다. null 값을 할당하면 런타임 오류가 발생합니다. 모두 다음과 같이 선언된 변수NULL이 아님반드시 Null이 아닌 기본값이 지정되었습니다.

변수의 기본값이 평가되어 다음에 할당됩니다. 블록이 입력될 때마다 변수(기능당 한 번이 아님) 전화). 예를 들어 할당지금()에 유형의 변수타임스탬프이유는 변수는 현재 함수 호출의 시간을 가지기 위한 것이지, 함수가 미리 컴파일된 시간입니다.

예:

수량 정수 기본값 32;
URL varchar := 'http://mysite.com';
user_id 상수 정수 := 10;

40.3.1. 함수 메이저 토토 사이트 매개변수

함수에 전달된 매개변수는 식별자로 이름이 지정됩니다.$1, $2등 선택적으로 별칭을 메이저 토토 사이트할 수 있습니다.$n매개변수 이름 가독성을 높이기 위해. 별칭 또는 숫자 그런 다음 식별자를 사용하여 매개변수 값을 참조할 수 있습니다.

별칭을 만드는 방법에는 두 가지가 있습니다. 선호되는 방법은 의 매개변수에 이름을 지정합니다.만들기 기능명령, 예:

CREATE FUNCTION sales_tax(소계 실수) $$로 실제 반환
시작
    RETURN 소계 * 0.06;
끝;
$$ 언어 plpgsql;

다른 방법, 이전에는 유일한 방법이었습니다.PostgreSQL8.0은 명시적으로 선언 구문을 사용하여 별칭을 선언합니다.

이름$에 대한 별칭n;

이 스타일의 동일한 예는 다음과 같습니다:

함수 만들기 sales_tax(real) $$로 실제 반환
선언
    $1에 대한 소계 별칭;
시작
    RETURN 소계 * 0.06;
끝;
$$ 언어 plpgsql;

참고:이 두 가지 예는 완벽하게 동일하지 않습니다. 에서 첫 번째 경우,소계아마도 다음과 같이 참조됨sales_tax.subtotal하지만 두 번째 경우에는 그럴 수 없었습니다. (내부에 라벨을 붙였더라면 차단,소계다음과 같은 자격을 얻을 수 있습니다. 대신 해당 라벨을 사용하세요.)

추가 예:

CREATE FUNCTION instr(varchar, 정수) 정수를 $$로 반환합니다.
선언
    v_string $1에 대한 별칭;
    $2에 대한 인덱스 별칭;
시작
    -- 여기서 v_string과 인덱스를 사용한 일부 계산
끝;
$$ 언어 plpgsql;

CREATE FUNCTION concat_selected_fields(in_t sometablename) 텍스트를 $$로 반환합니다.
시작
    반환 in_t.f1 || in_t.f3 || in_t.f5 || in_t.f7;
끝;
$$ 언어 plpgsql;

PL/pgSQL함수는 출력 매개변수로 메이저 토토 사이트되면 출력 매개변수가 제공됩니다.$n이름 일반 입력과 동일한 방식으로 선택적 별칭 매개변수. 출력 매개변수는 사실상 다음과 같은 변수입니다. NULL로 시작합니다. 실행 중에 할당되어야 합니다. 기능. 매개변수의 최종 값이 반환됩니다. 예를 들어 판매세 예시는 다음과 같이 수행할 수도 있습니다. 방법:

CREATE FUNCTION sales_tax(소계 실질, OUT 세금 실질) AS $$
시작
    세금 := 소계 * 0.06;
끝;
$$ 언어 plpgsql;

생략했음을 주목하세요실제 반환— 포함할 수도 있었지만 중복됩니다.

출력 매개변수는 여러 개를 반환할 때 가장 유용합니다. 가치. 간단한 예는 다음과 같습니다:

CREATE FUNCTION sum_n_product(x int, y int, OUT sum int, OUT prod int) AS $$
시작
    합 := x + y;
    prod := x * y;
끝;
$$ 언어 plpgsql;

에서 논의한 대로섹션 35.4.4이거 함수에 대한 익명 레코드 유형을 효과적으로 생성합니다. 결과. 만약에반품절이 주어졌습니다. 말해야 함반품 기록.

메이저 토토 사이트하는 또 다른 방법PL/pgSQL함수는 다음과 같습니다반품 테이블, 예:

CREATE FUNCTION 확장_판매(p_itemno int)
RETURNS TABLE(수량 정수, 총 숫자) AS $$
시작
    RETURN QUERY SELECT s.수량, s.수량 * s.가격 FROM 판매 AS s
                 s.itemno = p_itemno;
끝;
$$ 언어 plpgsql;

이것은 하나 이상을 메이저 토토 사이트하는 것과 정확히 동일합니다.아웃매개변수 및 지정SETOF 반환어떤 유형.

a의 반환 유형이 있을 때PL/pgSQL함수는 다형성으로 선언되었습니다 유형(모든 요소, 모든 배열, anynonarray, 안예넘또는anyrange), 특별 매개변수$0생성되었습니다. 데이터 유형은 다음과 같습니다. 실제 함수에서 추론된 함수의 실제 반환 유형 입력 유형(참조섹션 35.2.5). 이를 통해 함수는 실제 반환값에 액세스할 수 있습니다. 다음과 같이 입력하세요.섹션 40.3.3. $0은 null로 초기화되고 함수에 의해 수정될 수 있으므로 원하는 경우 값을 반환하지만 필수는 아닙니다.$0별칭을 부여할 수도 있습니다. 예를 들어, 이 함수는 다음이 있는 모든 데이터 유형에서 작동합니다.+연산자:

CREATE FUNCTION add_ three_values(v1 모든 요소, v2 모든 요소, v3 모든 요소)
모든 요소를 $$로 반환합니다.
선언
    $0에 대한 별칭 결과;
시작
    결과 := v1 + v2 + v3;
    결과 반환;
끝;
$$ 언어 plpgsql;

하나 이상의 출력을 선언하면 동일한 효과를 얻을 수 있습니다. 매개변수를 다형성 유형으로 사용합니다. 이 경우 특수$0매개변수가 사용되지 않습니다. 출력 매개변수 자체도 동일한 목적으로 사용됩니다. 예를 들면:

CREATE FUNCTION add_ three_values(v1 모든 요소, v2 모든 요소, v3 모든 요소,
                                 OUT 합계 모든 요소)
AS $$
시작
    합 := v1 + v2 + v3;
끝;
$$ 언어 plpgsql;

40.3.2. 별칭

새 이름별칭:이전 이름;

별칭구문은 다음보다 더 일반적입니다. 이전 섹션에서 제안되었습니다. 다음에 대한 별칭을 선언할 수 있습니다. 함수 매개변수뿐만 아니라 모든 변수. 주요 실제 용도 이는 변수에 다른 이름을 할당하는 것입니다. 다음과 같이 미리 결정된 이름신규또는오래된트리거 프로시저 내에서.

예:

선언하다
  이전에 대한 이전 별칭;
  새로운 별칭을 업데이트했습니다.

이후별칭두 가지 다른 방법을 생성합니다. 동일한 객체의 이름을 지정하기 위해 제한 없이 사용하면 혼란스러울 수 있습니다. 그것은 미리 결정된 것을 무시할 목적으로만 사용하는 것이 가장 좋습니다. 이름.

40.3.3. 복사 유형

변수%TYPE

%TYPE다음의 데이터 유형을 제공합니다. 변수 또는 테이블 열. 이를 사용하여 변수를 선언할 수 있습니다. 데이터베이스 값을 보유하게 됩니다. 예를 들어 이름이 지정된 열사용자_ID당신의사용자테이블. 동일한 변수를 선언하려면 데이터 유형은 다음과 같습니다.users.user_id당신은 다음과 같이 씁니다:

user_id users.user_id%TYPE;

사용하여%TYPE당신은 알 필요가 없습니다 참조하는 구조의 데이터 유형 및 대부분 중요한 것은 참조된 항목의 데이터 유형이 미래(예: 유형을 변경합니다.사용자_IDfrom정수진짜), 변경할 필요가 없을 수도 있습니다. 함수 정의.

%TYPE특히 가치가 있는 것은 다형성 함수(내부 데이터 유형이 필요하기 때문에) 변수는 한 호출에서 다음 호출로 변경될 수 있습니다. 적절한 적용하여 변수를 생성할 수 있습니다%TYPE함수의 인수 또는 결과 자리 표시자에.

40.3.4. 행 유형

이름 테이블_이름%ROWTYPE;
이름 composite_type_name;

복합 유형의 변수는 a변수 (또는행 유형변수). 이러한 변수는 a의 전체 행을 보유할 수 있습니다.선택또는for쿼리 결과, 해당 쿼리의 열 집합이 선언된 유형과 일치하는 한 변수. 행 값의 개별 필드는 다음을 사용하여 액세스됩니다. 예를 들어 일반적인 점 표기법rowvar.field.

행 변수는 행과 동일한 유형을 갖도록 선언될 수 있습니다 기존 테이블 또는 뷰를 사용하여테이블_이름%ROWTYPE표기법; 또는 복합 유형의 이름을 제공하여 선언할 수 있습니다. (모든 테이블에는 동일한 관련 복합 유형이 있으므로 이름은 실제로 중요하지 않습니다.PostgreSQL당신이 쓰는지 여부%ROWTYPE아니요. 하지만%ROWTYPE휴대성이 더 좋습니다.)

함수에 대한 매개변수는 복합 유형일 수 있습니다(전체 테이블 행). 이 경우 해당 식별자$n행이 될 것입니다 변수이며 여기에서 필드를 선택할 수 있습니다. 예를 들어$1.user_id.

테이블 행의 사용자 정의 열만 다음에서 액세스할 수 있습니다. OID나 다른 시스템 열이 아닌 행 유형 변수입니다(왜냐하면 행은 뷰에서 나올 수 있습니다). 행 유형의 필드는 다음과 같은 데이터 유형에 대한 테이블의 필드 크기 또는 정밀도문자(n).

다음은 복합 유형을 사용하는 예입니다.테이블1그리고테이블2있습니다 최소한 언급된 필드가 있는 기존 테이블:

CREATE FUNCTION merge_fields(t_row table1) 텍스트를 $$로 반환합니다.
선언
    t2_row 테이블2%ROWTYPE;
시작
    SELECT * INTO t2_row FROM table2 WHERE ... ;
    반환 t_row.f1 || t2_row.f3 || t_row.f5 || t2_row.f7;
끝;
$$ 언어 plpgsql;

SELECT merge_fields(t.*) FROM table1 t WHERE ... ;

40.3.5. 레코드 유형

이름기록;

레코드 변수는 행 유형 변수와 유사하지만 미리 정의된 구조가 없습니다. 실제 행 구조를 취합니다. 동안 할당된 행의선택또는for명령. 는 레코드 변수의 하위 구조는 매번 변경될 수 있습니다. 에 할당되었습니다. 그 결과 레코드 변수가 나올 때까지 처음 할당되고 하위 구조가 없으며 해당 필드에 액세스하면 런타임 오류가 발생합니다.

참고하세요기록실제 데이터가 아닙니다 입력하세요. 자리 표시자만 입력하세요. 또한 다음과 같은 경우에도 깨달아야 합니다.PL/pgSQL함수가 다음으로 선언되었습니다. 반환 유형기록, 이건 좀 아니네요 레코드 변수와 동일한 개념이지만 이러한 함수는 레코드 변수를 사용하여 결과를 보관할 수 있습니다. 두 경우 모두 실제 행 구조는 함수가 작성될 때 알 수 없지만 반환하는 함수의 경우기록실제 호출 쿼리가 구문 분석될 때 구조가 결정되는 반면, 레코드 변수는 행 구조를 즉시 변경할 수 있습니다.

40.3.6. 의 대조PL/pgSQL변수

PL/pgSQL함수에는 조합 가능한 데이터 유형의 하나 이상의 매개변수인 경우 조합은 데이터 정렬에 따라 각 함수 호출에 대해 식별됩니다. 설명된 대로 실제 인수에 할당됩니다.섹션 22.2. 콜레이션이 성공적으로 이루어진 경우 식별됨(즉, 암시적 대조의 충돌이 없음) 인수 중에서) 조합 가능한 모든 매개변수가 처리됩니다. 암시적으로 데이터 정렬을 갖는 것입니다. 이는 행동에 영향을 미칩니다 함수 내에서 데이터 정렬에 민감한 작업. 예를 들어, 고려하다

CREATE FUNCTION less_than(a text, b text) $$로 부울을 반환합니다.
시작
    반환 a < b;
끝;
$$ 언어 plpgsql;

SELECT less_than(text_field_1, text_field_2) FROM table1;
SELECT less_than(text_field_1, text_field_2 COLLATE "C") FROM table1;

처음 사용less_than할 것이다 공통 데이터 정렬을 사용합니다.text_field_1그리고text_field_2비교를 위해, 반면 두 번째 사용은 다음을 사용합니다C조합.

또한 식별된 데이터 정렬은 다음으로 가정됩니다. 조합 가능한 유형의 지역 변수를 조합합니다. 따라서 이 함수는 작성되었다면 전혀 다르게 작동하지 않을 것입니다. 와 같이

CREATE FUNCTION less_than(a text, b text) $$로 부울을 반환합니다.
선언
    local_a 텍스트 := a;
    local_b 텍스트 := b;
시작
    RETURN local_a < local_b;
끝;
$$ 언어 plpgsql;

조합 가능한 데이터 유형의 매개변수가 없거나 공통 데이터 정렬을 식별한 다음 매개변수와 지역 변수는 해당 데이터 유형의 기본 데이터 정렬을 사용합니다( 일반적으로 데이터베이스의 기본 데이터 정렬이지만 다를 수 있습니다. 도메인 유형 변수의 경우).

조합 가능한 데이터 유형의 지역 변수는 를 포함하여 이와 관련된 데이터 정렬콜레이트메이저 토토 사이트의 옵션, 예를 들어

메이저 토토 사이트하다
    local_a text 대조 "en_US";

이 옵션은 그렇지 않은 데이터 정렬을 무시합니다. 위의 규칙에 따라 변수에 제공됩니다.

또한 물론 명시적입니다콜레이트강제하려는 경우 함수 내부에 절을 작성할 수 있습니다. 특정 작업에 사용되는 특정 데이터 정렬입니다. 에 대한 예

CREATE FUNCTION less_than_c(a text, b text) $$로 부울을 반환합니다.
시작
    RETURN a < b COLLATE "C";
끝;
$$ 언어 plpgsql;

이것은 테이블 열과 관련된 데이터 정렬을 무시합니다. 매개변수 또는 표현식에 사용되는 지역 변수 일반 SQL 명령에서 발생합니다.