Postgresql 9.3.25 문서 | ||||
---|---|---|---|---|
Postgre메이저 토토 사이트 : 문서 : 9.3 : PL/PG메이저 토토 사이트의 구조 | Postgre메이저 토토 사이트 : 문서 : 9.3 : PL/PG메이저 토토 사이트 -메이저 토토 사이트 절차 언어 | 40 장pl/pgsql - SQL절차 언어 | 다음 |
블록에 사용 된 모든 변수는 블록의 메이저 토토 사이트 섹션. (유일한 예외는 그 것입니다 a의 루프 변수for루프 반복 다양한 정수 값을 통해 자동으로 메이저 토토 사이트됩니다. 정수 변수 및 마찬가지로 A의 루프 변수for커서의 결과를 반복하는 루프 자동으로 레코드 변수로 메이저 토토 사이트되었습니다.)
pl/pgsql변수는 무엇이든 가질 수 있습니다 와 같은 SQL 데이터 유형정수, varchar및char.
변수 선언의 몇 가지 예는 다음과 같습니다.
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;
함수로 전달 된 매개 변수는 식별자와 명명됩니다$ 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;
NewName별칭OldName;
the별명구문은보다 일반적입니다 이전 섹션에서 제안됩니다. 함수 매개 변수가 아닌 모든 변수. 주요 실용적 사용 이것은 변수에 대해 다른 이름을 할당하는 것입니다. 와 같은 미리 정해진 이름NEW또는old방아쇠 절차 내에서.
예 :
선언 이전의 사전 별칭; 새로운 별명을 업데이트했습니다.
이후alias두 가지 방법을 만듭니다 동일한 개체의 이름을 지정하려면 무제한 사용이 혼란 스러울 수 있습니다. 그것은 미리 결정된 재정의 목적으로 만 사용하는 것이 가장 좋습니다. 이름.
변수%유형
%유형a의 데이터 유형을 제공합니다 변수 또는 테이블 열. 이것을 사용하여 변수를 선언 할 수 있습니다 데이터베이스 값을 유지합니다. 예를 들어, 당신에게 a가 있다고 가정 해 봅시다 열이라는 열user_idin사용자테이블. 변수를 동일하게 선언합니다 데이터 유형 asusers.user_id당신은 다음 :
user_id users.user_id%유형;
사용하여%유형당신은 알 필요가 없습니다 참조하는 구조의 데이터 유형 및 대부분 중요하게도, 참조 된 항목의 데이터 유형이 미래 (예를 들어 : 유형을 변경user_idFrom정수toReal), 당신은 당신의 변경할 필요가 없을 수도 있습니다 함수 정의.
%유형특히 가치가 있습니다 내부에 필요한 데이터 유형이므로 다형성 기능 변수는 한 통화에서 다음 호출로 변경 될 수 있습니다. 적절한 변수는 적용하여 생성 할 수 있습니다%유형함수의 인수 또는 결과 자리 표시 자에게.
이름 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.*)를 선택하십시오 ...;
이름레코드;
레코드 변수는 행 유형 변수와 유사하지만 그것들은 그것들입니다 사전 정의 된 구조가 없습니다. 그들은 실제 행 구조를 취합니다 그들이 a에 할당 된 행의select또는for명령. 그만큼 레코드 변수의 하위 구조는 할당. 그 결과는 레코드 변수까지 먼저 할당되며, 하위 구조가 없으며 필드에 액세스하면 런타임 오류가 발생합니다.
참고레코드는 실제 데이터가 아닙니다 유형, 자리 표시 자만. 또한 A를 깨달아야합니다.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 명령에서 발생합니다.