이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다스포츠 토토 베트맨 PostgreSQL : 문서 : 17 : 41.3. 메이저 토토 사이트버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

40.3. 메이저 토토 사이트

블록에 사용 된 모든 변수는 블록의 메이저 토토 사이트 섹션. (유일한 예외는 그 것입니다 a의 루프 변수for루프 반복 다양한 정수 값을 통해 자동으로 메이저 토토 사이트됩니다. 정수 변수 및 마찬가지로 A의 루프 변수for커서의 결과를 반복하는 루프 자동으로 레코드 변수로 메이저 토토 사이트되었습니다.)

pl/pgsql변수는 무엇이든 가질 수 있습니다 와 같은 SQL 데이터 유형정수, varcharchar.

변수 선언의 몇 가지 예는 다음과 같습니다.

user_id 정수;
수량 숫자 (5);
URL VARCHAR;
Myrow tablename%rowtype;
Myfield tablename.columnname%유형;
아로우 레코드;

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

이름[상수]type[Collatecollation_name ] [NOT NULL] [기본값 | : =표현 ];

the기본값조항이 주어지면 지정합니다 블록이있을 때 변수에 할당 된 초기 값 입력. 인 경우기본값절은 그렇지 않습니다 주어지면 변수가에 초기화됩니다.SQL널 값. 그만큼Constant옵션은 변수가 존재하는 것을 방지합니다 초기화 후 지정되어 값이 남아 있습니다. 블록 기간 동안 일정합니다. 그만큼Collate옵션에 사용할 수있는 콜레이션을 지정합니다 변수 (참조섹션 40.3.6). 만약에NOT NULL지정되어 있습니다 널 값을 할당하면 런타임 오류가 발생합니다. 모두 변수로 메이저 토토 사이트 된 변수NOT NULLa Nonnull 기본값 지정된 기본값.

변수의 기본값이 평가되고 할당됩니다. 블록을 입력 할 때마다 변수 (함수 당 한 번만 아님 부르다). 예를 들어, 할당now ()TO 유형의 변수타임 스탬프원인 현재 함수 호출 시간을 가질 수있는 변수 기능이 사전 컴파일 된 시간.

예 :

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

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

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

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

함수 생성 sales_tax (subtotal real)는 real을 $$로 반환합니다
시작하다
    반환 하위 토탈 * 0.06;
끝;
$$ 언어 plpgsql;

다른 방법으로, 이전에 사용할 수있는 유일한 방법postgresql8.0은 명시 적으로 사용됩니다 선언문 구문을 사용하여 별칭 선언

이름$ 별명n;

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

함수 생성 sales_tax (real)는 real을 $$로 반환합니다
메이저 토토 사이트하다
    1 달러에 대한 소계 별칭;
시작하다
    반환 하위 토탈 * 0.06;
끝;
$$ 언어 plpgsql;

참고 :이 두 예제는 완벽하게 동일하지 않습니다. ~ 안에 첫 번째 사례subtotal참조sales_tax.subtotal두 번째 경우는 할 수 없었습니다. (우리는 내부에 라벨을 부착했다 차단하다,subtotal대신 그 라벨,)

더 많은 예 :

기능 기기 생성 (Varchar, Integer)은 정수를 $$로 반환합니다
선언하다
    $ 1에 대한 v_string 별칭;
    $ 2의 색인 별칭;
시작하다
    - v_string 및 색인을 사용한 일부 계산
끝;
$$ 언어 plpgsql;

conection concat_selected_fields (in_t tomesableName) 텍스트를 $$로 반환합니다
시작하다
    IN_T.F1 || 반환 in_t.f3 || in_t.f5 || in_t.f7;
끝;
$$ 언어 plpgsql;

언제pl/pgsql함수는입니다 출력 매개 변수로 메이저 토토 사이트하면 출력 매개 변수가 제공됩니다$n이름 그리고 일반 입력과 같은 방식으로 선택적 별칭 매개 변수. 출력 매개 변수는 효과적으로 변수입니다 Null을 시작합니다. 실행 중에 할당해야합니다 기능. 매개 변수의 최종 값은 반환됩니다. 예를 들어, 판매 세 예제도이를 수행 할 수 있습니다. 방법:

함수 sales_tax (subtotal real, out tax real)를 $$로 만듭니다
시작하다
    세금 : = 하위 운동 * 0.06;
끝;
$$ 언어 plpgsql;

우리가 생략 한 것을 알았습니다Retors Real- 우리는 그것을 포함시킬 수 있었지만 중복 될 것입니다.

출력 매개 변수는 여러 반환 할 때 가장 유용합니다 값. 사소한 예는 다음과 같습니다.

함수 생성 sum_n_product (x int, y int, out sum int, out prod int) $$
시작하다
    합 : = x + y;
    prod : = x * y;
끝;
$$ 언어 plpgsql;

에서 논의 된대로섹션 35.4.4,이 효과적으로 함수의 익명 레코드 유형을 만듭니다 결과. a반환조항이 제공됩니다 말해야 할레코드 반환.

메이저 토토 사이트하는 또 다른 방법pl/pgsql함수는테이블 리턴, 예 :

함수 생성 extended_sales (p_itemno int)
테이블 (수량 int, 총 숫자)을 $$로 반환합니다
시작하다
    반환 쿼리 SELECT S.QUANTITY, S.QUANTITY * S. S. PRICE AS AS
                 여기서 s.itemno = p_itemno;
끝;
$$ 언어 plpgsql;

이것은 하나 이상을 메이저 토토 사이트하는 것과 정확히 동일합니다out매개 변수 및 지정setof 반환Somegeype.

반환 유형의시기pl/pgsql함수는 다형성으로 선언됩니다 유형 (Anylement, AnyArray, AnynonArray, AnyEnum또는AnyRange), 특별 매개 변수$ 0생성되었습니다. 데이터 유형입니다 실제에서 추론 된 기능의 실제 반환 유형 입력 유형 (참조섹션 35.2.5). 이를 통해 기능이 실제 반환에 액세스 할 수 있습니다 에 표시된대로 입력섹션 40.3.3. $ 0님이 null로 초기화되었습니다 함수에 의해 수정 될 수 있으므로 원하는 경우 반환 값이 필요하지 않습니다.$ 0또한 별칭을받을 수 있습니다. 예를 들어, 이것은입니다 함수는 a가있는 모든 데이터 유형에서 작동합니다.+운영자 :

함수 생성 add_three_values ​​(v1 anylement, v2 anylement, v3 anylement)
모든 요소를 ​​$$로 반환합니다
선언하다
    $ 0에 대한 결과 별칭;
시작하다
    결과 : = v1 + v2 + v3;
    반환 결과;
끝;
$$ 언어 plpgsql;

하나 이상의 출력을 메이저 토토 사이트함으로써 동일한 효과를 얻을 수 있습니다. 다형성 유형으로서 매개 변수. 이 경우 특별$ 0매개 변수는 사용되지 않습니다. 출력 매개 변수 자체는 동일한 목적을 제공합니다. 예를 들어:

함수 생성 add_three_values ​​(v1 anylement, v2 anylement, v3 anylement,
                                 out sum anylement)
$$로
시작하다
    합 : = v1 + v2 + v3;
끝;
$$ 언어 plpgsql;

40.3.2. alias

NewName별칭OldName;

the별명구문은보다 일반적입니다 이전 섹션에서 제안됩니다. 함수 매개 변수가 아닌 모든 변수. 주요 실용적 사용 이것은 변수에 대해 다른 이름을 할당하는 것입니다. 와 같은 미리 정해진 이름NEW또는old방아쇠 절차 내에서.

예 :

선언
  이전의 사전 별칭;
  새로운 별명을 업데이트했습니다.

이후alias두 가지 방법을 만듭니다 동일한 개체의 이름을 지정하려면 무제한 사용이 혼란 스러울 수 있습니다. 그것은 미리 결정된 재정의 목적으로 만 사용하는 것이 가장 좋습니다. 이름.

40.3.3. 복사 유형

변수%유형

%유형a의 데이터 유형을 제공합니다 변수 또는 테이블 열. 이것을 사용하여 변수를 선언 할 수 있습니다 데이터베이스 값을 유지합니다. 예를 들어, 당신에게 a가 있다고 가정 해 봅시다 열이라는 열user_idin사용자테이블. 변수를 동일하게 선언합니다 데이터 유형 asusers.user_id당신은 다음 :

user_id users.user_id%유형;

사용하여%유형당신은 알 필요가 없습니다 참조하는 구조의 데이터 유형 및 대부분 중요하게도, 참조 된 항목의 데이터 유형이 미래 (예를 들어 : 유형을 변경user_idFrom정수toReal), 당신은 당신의 변경할 필요가 없을 수도 있습니다 함수 정의.

%유형특히 가치가 있습니다 내부에 필요한 데이터 유형이므로 다형성 기능 변수는 한 통화에서 다음 호출로 변경 될 수 있습니다. 적절한 변수는 적용하여 생성 할 수 있습니다%유형함수의 인수 또는 결과 자리 표시 자에게.

40.3.4. 행 유형

이름 table_name%RowType;이름 composite_type_name;

복합 유형의 변수를 a라고합니다.Row변수 (또는Row-Type변수). 이러한 변수는 A의 전체 행을 보유 할 수 있습니다.select또는for쿼리 결과, 그 쿼리의 열 세트가 선언 된 유형의 변하기 쉬운. 행 값의 개별 필드는 일반적인 도트 표기법 (예 :Rowvar.field.

행 변수는 행과 동일한 유형을 갖도록 선언 할 수 있습니다. 기존 테이블 또는 뷰의table_name%RowType표기법; 또는 복합 유형의 이름을 제공하여 선언 할 수 있습니다. (모든 테이블에는 관련 복합 유형이 동일하기 때문에 이름, 실제로는 중요하지 않습니다PostgreSQL쓰기 여부%RowType하지만 형식%RowType더 휴대가 가능합니다.)

함수에 대한 매개 변수는 복합 유형 일 수 있습니다 (완료 테이블 줄). 이 경우 해당 식별자$n행이 될 것입니다 변수 및 필드를 선택할 수 있습니다 (예 :$ 1.user_id.

테이블 행의 사용자 정의 열만 액세스 할 수 있습니다. OID 또는 기타 시스템 열이 아닌 행 형 변수 ( 행은보기에서 나올 수 있습니다). 행 유형의 필드는 상속합니다 와 같은 데이터 유형의 테이블 필드 크기 또는 정밀char (n).

복합 유형을 사용하는 예는 다음과 같습니다.표 1and표 2최소한 언급 된 필드가있는 기존 테이블 :

함수 생성 merge_fields (t_row table1)는 텍스트를 $$로 반환합니다
선언하다
    T2_ROW 표 2%RowType;
시작하다
    * T2_ROW로 *를 선택하여 표 2에서 ...;
    t_row.f1 ||를 반환합니다 t2_row.f3 || t_row.f5 || t2_row.f7;
끝;
$$ 언어 plpgsql;

표 1 T에서 merge_fields (t.*)를 선택하십시오 ...;

40.3.5. 레코드 유형

이름레코드;

레코드 변수는 행 유형 변수와 유사하지만 그것들은 그것들입니다 사전 정의 된 구조가 없습니다. 그들은 실제 행 구조를 취합니다 그들이 a에 할당 된 행의select또는for명령. 그만큼 레코드 변수의 하위 구조는 할당. 그 결과는 레코드 변수까지 먼저 할당되며, 하위 구조가 없으며 필드에 액세스하면 런타임 오류가 발생합니다.

참고레코드는 실제 데이터가 아닙니다 유형, 자리 표시 자만. 또한 A를 깨달아야합니다.pl/pgsql함수가 선언됩니다 반환 유형레코드, 이것은 그다지 아닙니다 이러한 기능이지만 레코드 변수와 동일한 개념 레코드 변수를 사용하여 결과를 유지할 수 있습니다. 두 경우 모두 기능이 작성 될 때 실제 행 구조는 알 수 없지만 반환 기능레코드실제 호출 쿼리가 구문 분석 될 때 구조가 결정되는 반면 레코드 변수는 행 구조를 비행기로 변경할 수 있습니다.

40.3.6. 의 협업pl/pgsql변수

apl/pgsql함수는 Collatable Data Type의 하나 이상의 매개 변수, Collation은 콜로레이션에 따라 각 기능 호출에 대해 식별됩니다 에 설명 된대로 실제 인수에 할당섹션 22.2. Collation이 성공적으로있는 경우 식별 된 (즉, 암시 적 콜라이트의 충돌은 없습니다 인수 중에) 모든 Collatable 매개 변수가 처리됩니다. 그 충돌이 암시 적으로. 이것은 행동에 영향을 미칩니다 함수 내에서 Collation에 민감한 작업. 예를 들어, 고려하다

함수 생성 Less_than (텍스트, B 텍스트) Boolean을 $$로 반환합니다.
시작하다
    a <b;
끝;
$$ 언어 plpgsql;

table1에서 Less_than (text_field_1, text_field_2)을 선택하십시오.
Less_than (Text_field_1, Text_field_2 Collate "C")을 select table1;

첫 번째 사용Less_than의지 의 공통 통합 사용Text_field_1andText_field_2비교를 위해 두 번째 사용은 사용CCollation.

또한, 식별 된 콜레이션도 Collatable 유형의 로컬 변수의 협업. 따라서 이 기능이 작성된 경우 다르게 작동하지 않습니다. 처럼

함수 만들기 Less_than (텍스트, B 텍스트) Boolean을 $$로 반환합니다.
선언하다
    local_a 텍스트 : = a;
    local_b 텍스트 : = b;
시작하다
    Local_a <local_b를 반환합니다.
끝;
$$ 언어 plpgsql;

Collatable 데이터 유형의 매개 변수가없는 경우 공통 협업을 식별 한 다음 매개 변수 및 로컬 변수는 데이터 유형의 기본 수집을 사용합니다 ( 일반적으로 데이터베이스의 기본 콜레이션이지만 다를 수 있습니다. 도메인 유형의 변수).

Collatable Data Type의 로컬 변수는 다른 것을 가질 수 있습니다. 를 포함하여 그것과 관련된 CollationCollate예를 들어 메이저 토토 사이트의 옵션

메이저 토토 사이트
    local_a 텍스트는 "en_us";를 충족시킵니다.

이 옵션은 그렇지 않으면 Collation을 무시합니다 위의 규칙에 따라 변수에 제공됩니다.

물론 명시 적Collate강제가 원하는 경우 기능 내부에 조항을 작성할 수 있습니다. 특정 작업에서 사용되는 특정 콜레이션. 을 위한 예,

함수 만들기 Less_than_c (a 텍스트, b 텍스트) Boolean을 $$로 반환합니다.
시작하다
    a <b collate "c"를 반환합니다.
끝;
$$ 언어 plpgsql;

이것은 테이블 열과 관련된 콜라이트를 무시합니다. 표현에 사용 된 매개 변수 또는 로컬 변수 일반 SQL 명령에서 발생합니다.