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

23.3. 토토 베이

블록에 사용된 모든 변수, 행 및 레코드는 다음과 같아야 합니다. 블록의 선언 섹션에 선언되었습니다. (유일한 예외는 FOR 루프의 루프 변수가 반복된다는 것입니다. 정수 값의 범위는 자동으로 정수로 선언됩니다. 변수.)

PL/pgSQL변수는 다음을 가질 수 있습니다. 모든 SQL 데이터 유형(예:INTEGER, VARCHAR그리고CHAR.

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

사용자 ID INTEGER;
수량 숫자(5);
URL VARCHAR;

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

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

DEFAULT 절이 제공되면 초기 값을 지정합니다. 블록이 입력될 때 변수에 할당됩니다. 만약 DEFAULT 절이 제공되지 않으면 변수가 다음으로 초기화됩니다.SQLNULL 값입니다.

CONSTANT 옵션은 변수가 할당되는 것을 방지합니다 그 가치가 지속 기간 동안 일정하게 유지되도록 블록. NOT NULL이 지정되면 NULL 값이 할당됩니다. 런타임 오류가 발생합니다. NOT NULL로 토토 베이된 모든 변수 NULL이 아닌 기본값이 지정되어 있어야 합니다.

기본값은 블록이 실행될 때마다 평가됩니다. 입력했습니다. 예를 들어 '를 할당하면지금' 유형의 변수로타임스탬프변수가 다음의 시간을 갖도록 합니다. 함수가 미리 컴파일되었을 때가 아닌 현재 함수 호출입니다.

예:

수량 INTEGER DEFAULT 32;
URL varchar := ''http://mysite.com'';
user_id 상수 정수 := 10;

23.3.1. 함수의 별칭 매개변수

이름별칭:$n;

함수에 전달된 매개변수의 이름은 식별자$1, $2등 선택적으로 별칭을 토토 베이할 수 있습니다.$n증가된 매개변수 이름 가독성. 별칭이나 숫자 식별자 중 하나를 사용할 수 있습니다. 그런 다음 매개변수 값을 참조하는 데 사용됩니다. 일부 예:

CREATE FUNCTION sales_tax(REAL) REAL AS '를 반환합니다.
선언
    $1에 대한 소계 별칭;
시작
    소계 * 0.06 반환;
끝;
' 언어 'plpgsql';

CREATE FUNCTION instr(VARCHAR,INTEGER)는 INTEGER를 '로 반환합니다.
선언
    v_string $1에 대한 별칭;
    $2에 대한 인덱스 별칭;
시작
    -- 여기에 몇 가지 계산이 있습니다.
끝;
' 언어 'plpgsql';

23.3.2. 행 유형

이름 테이블 이름%ROWTYPE;

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

현재 행 변수는 다음을 통해서만 선언될 수 있습니다.%ROWTYPE표기법; 그럴 수도 있겠지만 기본 테이블 이름이 유형 선언으로 작동할 것으로 예상합니다. 이내에는 허용되지 않습니다.PL/pgSQL함수.

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

테이블 행의 사용자 정의 속성만 OID나 다른 시스템이 아닌 rowtype 변수에서 액세스 가능 속성(행이 뷰에서 나올 수 있기 때문) 필드 행 유형은 테이블의 필드 크기 또는 정밀도를 상속합니다. 다음과 같은 데이터 유형문자(n).

23.3.3. 기록

이름기록;

레코드 변수는 행 유형 변수와 유사하지만 미리 정의된 구조가 없습니다. 그들은 실제 행을 맡는다 SELECT 또는 FOR 중에 할당된 행의 구조 명령. 레코드 변수의 하위 구조는 각각을 변경할 수 있습니다. 할당된 시간입니다. 이것의 결과는 다음과 같습니다. 레코드 변수가 먼저 할당됩니다.그것은 없습니다하위 구조 및 기타 해당 필드에 액세스하려고 하면 런타임 오류가 발생합니다.

참고기록사실이 아닙니다 데이터 유형, 자리 표시자만 있습니다. 따라서 예를 들어 다음과 같은 작업을 수행할 수 없습니다. 반환하는 함수를 선언합니다.기록.

23.3.4. 속성

다음을 사용하여%TYPE그리고%ROWTYPE속성, 다음을 사용하여 변수를 선언할 수 있습니다. 다른 데이터베이스 항목과 동일한 데이터 유형 또는 구조(예: 테이블 필드).

변수%TYPE

%TYPE다음의 데이터 유형을 제공합니다. 변수 또는 데이터베이스 열. 이를 사용하여 다음을 수행할 수 있습니다. 데이터베이스 값을 보유할 변수를 선언합니다. 에 대한 예를 들어,라는 이름의 열이 있다고 가정해 보겠습니다.사용자_ID당신의사용자테이블. 동일한 데이터 유형을 가진 변수를 선언하려면사용자.사용자_ID당신은 다음과 같이 씁니다:

user_id users.user_id%TYPE;

사용하여%TYPE그럴 필요는 없습니다 참조하는 구조의 데이터 유형을 알고, 그리고 가장 중요한 것은 참조된 데이터 유형이 향후 항목 변경(예: 테이블 변경) INTEGER에서 REAL로 user_id 정의), 그렇지 않을 수도 있습니다. 함수 정의를 변경해야 합니다.

테이블%ROWTYPE

%ROWTYPE복합을 제공합니다 지정된 행 전체에 해당하는 데이터 유형 테이블.테이블반드시 데이터베이스의 기존 테이블 또는 뷰 이름입니다.

선언하다
    users_rec 사용자%ROWTYPE;
    user_id 사용자.user_id%TYPE;
시작
    user_id := users_rec.user_id;
    ...

CREATE FUNCTION does_view_exist(INTEGER) RETURNS bool AS '
   선언
        $1의 주요 별칭;
        table_data cs_materialized_views%ROWTYPE;
   시작
        SELECT INTO table_data * FROM cs_materialized_views
               여기서 sort_key=key;

        발견되지 않은 경우
           거짓을 반환합니다.
        종료하면;
        반환 참;
   끝;
' 언어 'plpgsql';

23.3.5. 이름 바꾸기

RENAME이전 이름받는 사람새 이름;

RENAME 선언을 사용하여 이름을 변경할 수 있습니다 변수, 레코드 또는 행. 이는 NEW 또는 OLD인 경우 주로 유용합니다. 트리거 내에서 다른 이름으로 참조되어야 합니다. 절차. 별칭도 참조하세요.

예:

ID를 user_id로 RENAME;
this_var의 이름을 that_var로 바꾸세요.

참고:RENAME이 현재 손상된 것으로 보입니다. 포스트그레SQL 7.2. ALIAS 이후로 이 문제를 해결하는 것은 우선순위가 낮습니다. RENAME의 실제 용도 대부분을 다룹니다.