이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 스포츠 토토 결과 만들기버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

무지개 토토 생성

이름

CREATE FUNCTION -- 새 무지개 토토 정의

시놉시스

무지개 토토 생성 [ 또는 교체 ]이름 ( [ [ argmode ] [ argname ] argtype[  기본 | =default_expr] [, ...] ] )
    [ 반품재입력| 반환 테이블(컬럼_이름 열_유형[, ...] ) ]
   언어lang_name| 유형에 대한 변환유형_이름[, ... ]
    | 창
    | 불변 | 안정적 | 휘발성 | [ 아님 ] 누출 방지
    | NULL 입력 시 호출됨 | NULL 입력 시 NULL 반환 | 엄격
    | [ 외부 ] 보안 호출자 | [ 외부 ] 보안 정의자
    | 비용execution_cost| 행결과_행| 설정configuration_parameter받는 사람 | = | 현재부터 
    | 그대로 '정의'
    | 그대로 'obj_file', 'link_symbol'
   ...
    [ 와 (속성 [, ...] ) ]

설명

무지개 토토 생성새 기능을 정의합니다.무지개 토토 생성 또는 교체새 함수를 생성하거나 기존 정의를 대체합니다. 함수를 정의하려면 사용자에게 다음이 있어야 합니다.사용언어에 대한 권한입니다.

스키마 이름이 포함된 경우 함수는 지정된 스키마에 생성됩니다. 그렇지 않으면 현재 스키마에 생성됩니다. 새 함수의 이름은 동일한 스키마에서 동일한 입력 인수 유형을 가진 기존 함수와 일치하면 안 됩니다. 그러나 서로 다른 인수 유형의 함수는 이름을 공유할 수 있습니다.오버로딩).

기존 함수의 현재 정의를 바꾸려면 다음을 사용하십시오.무지개 토토 생성 또는 교체. 이 방법으로 함수의 이름이나 인수 유형을 변경하는 것은 불가능합니다(만약 시도한다면 실제로는 새로운 별개의 함수를 생성하게 될 것입니다). 또한,무지개 토토 생성 또는 교체기존 함수의 반환 유형을 변경할 수 없습니다. 그렇게 하려면 함수를 삭제하고 다시 생성해야 합니다. (사용시OUT매개변수, 즉 어떤 유형도 변경할 수 없음을 의미합니다.아웃무지개 토토 삭제를 제외한 매개변수.)

언제무지개 토토 생성 또는 교체은 기존 함수를 대체하는 데 사용되며 함수의 소유권과 권한은 변경되지 않습니다. 다른 모든 기능 속성에는 명령에 지정되거나 암시된 값이 할당됩니다. 이를 대체하려면 함수를 소유해야 합니다(여기에는 소유 역할의 구성원이 되는 것도 포함됩니다).

함수를 삭제한 후 다시 생성하면 새 함수는 이전 함수와 동일한 개체가 아닙니다. 이전 함수를 참조하는 기존 규칙, 보기, 트리거 등을 삭제해야 합니다. 사용무지개 토토 생성 또는 교체함수를 참조하는 객체를 손상시키지 않고 함수 정의를 변경합니다. 또한,무지개 토토 변경기존 함수의 대부분의 보조 속성을 변경하는 데 사용할 수 있습니다.

함수를 생성한 사용자가 함수의 소유자가 됩니다.

함수를 생성하려면 다음이 있어야 합니다.사용인수 유형 및 반환 유형에 대한 권한입니다.

매개변수

이름

생성할 함수의 이름(선택적으로 스키마 한정).

argmode

인수의 모드:IN, 밖으로, INOUT또는VARIADIC. 생략하면 기본값은IN. 만아웃인수는 다음과 같습니다.VARIADIC하나. 또한,아웃그리고INOUT인수는 다음과 함께 사용할 수 없습니다.반품 테이블표기법.

인수이름

인수의 이름. 일부 언어(SQL 및 PL/pgSQL 포함)에서는 함수 본문에 이름을 사용할 수 있습니다. 다른 언어의 경우 입력 인수의 이름은 함수 자체에 관한 한 추가 문서일 뿐입니다. 하지만 가독성을 높이기 위해 함수를 호출할 때 입력 인수 이름을 사용할 수 있습니다(참조토토 사이트 순위 : 문서 : 9.5 : 함수 호출). 어떤 경우든 출력 인수의 이름은 결과 행 유형의 열 이름을 정의하므로 중요합니다. (출력 인수의 이름을 생략하면 시스템은 기본 열 이름을 선택합니다.)

argtype

함수 인수(선택적으로 스키마 한정)의 데이터 유형(있는 경우). 인수 유형은 기본, 복합 또는 도메인 유형이거나 테이블 열 유형을 참조할 수 있습니다.

구현 언어에 따라 지정이 허용될 수도 있습니다"유사형"예:cstring. 유사 유형은 실제 인수 유형이 불완전하게 지정되었거나 일반 SQL 데이터 유형 집합을 벗어났음을 나타냅니다.

열 유형은 쓰기로 참조됩니다.테이블_이름.열_이름%TYPE. 이 기능을 사용하면 테이블 정의 변경과 관계없이 함수를 독립적으로 만드는 데 도움이 될 수 있습니다.

default_expr

매개변수가 지정되지 않은 경우 기본값으로 사용되는 표현식입니다. 표현식은 매개변수의 인수 유형으로 강제 변환 가능해야 합니다. 입력만(포함INOUT) 매개변수는 기본값을 가질 수 있습니다. 기본값이 있는 매개변수 뒤에 오는 모든 입력 매개변수에도 기본값이 있어야 합니다.

재입력

반환 데이터 유형(선택적으로 스키마 한정). 반환 유형은 기본, 복합 또는 도메인 유형일 수도 있고 테이블 열 유형을 참조할 수도 있습니다. 구현 언어에 따라 지정할 수도 있습니다."유사형"예:cstring. 함수가 값을 반환하지 않아야 하는 경우 다음을 지정하십시오.공허반환 유형으로.

있을 때아웃또는INOUT매개변수,반품절은 생략 가능합니다. 존재하는 경우 출력 매개변수가 암시하는 결과 유형과 일치해야 합니다.기록여러 출력 매개변수가 있거나 단일 출력 매개변수와 동일한 유형이 있는 경우.

SETOF수정자는 무지개 토토가 단일 항목이 아닌 일련의 항목을 반환함을 나타냅니다.

열의 유형은 쓰기로 참조됩니다.테이블_이름.열_이름%TYPE.

열_이름

다음의 출력 열 이름반품 테이블구문. 이는 사실상 명명된을 선언하는 또 다른 방법입니다.아웃매개변수, 제외반품 테이블또한 암시함SETOF 반환.

열_유형

출력 열의 데이터 유형반품 테이블구문.

lang_name

함수가 구현된 언어의 이름. 다음과 같을 수 있습니다.sql, c, 내부또는 사용자 정의 절차 언어의 이름(예:plpgsql. 이름을 작은따옴표로 묶는 것은 더 이상 사용되지 않으며 대소문자가 일치해야 합니다.

변환 유형에 대해유형_이름 } [, ... ] }

무지개 토토 호출을 변환하는 목록이 적용되어야 합니다. SQL 유형과 언어별 데이터 유형 간 변환을 변환합니다. 참조PostgreSQL : 문서 : 9.5 : 토토 캔 생성. 절차적 언어 구현에는 일반적으로 내장 유형에 대한 지식이 하드코딩되어 있으므로 여기에 나열할 필요가 없습니다. 절차적 언어 구현이 유형을 처리하는 방법을 모르고 변환이 제공되지 않는 경우 데이터 유형 변환을 위한 기본 동작으로 돌아가지만 이는 구현에 따라 다릅니다.

함수는 다음과 같습니다.창 무지개 토토일반 함수가 아닙니다. 이는 현재 C로 작성된 함수에만 유용합니다.기존 함수 정의를 바꿀 때 속성을 변경할 수 없습니다.

불변
안정적
휘발성

이러한 속성은 쿼리 최적화 프로그램에 함수의 동작에 대해 알려줍니다. 최대 하나의 선택 항목을 지정할 수 있습니다. 이들 중 어느 것도 나타나지 않으면,휘발성기본 가정입니다.

불변함수는 데이터베이스를 수정할 수 없으며 동일한 인수 값이 주어지면 항상 동일한 결과를 반환함을 나타냅니다. 즉, 데이터베이스 조회를 수행하지 않거나 인수 목록에 직접 존재하지 않는 정보를 사용하지 않습니다. 이 옵션이 제공되면 모든 상수 인수를 사용하여 함수를 호출하면 즉시 함수 값으로 대체될 수 있습니다.

안정적함수는 데이터베이스를 수정할 수 없으며 단일 테이블 스캔 내에서 동일한 인수 값에 대해 동일한 결과를 일관되게 반환하지만 해당 결과는 SQL 문 전체에서 변경될 수 있음을 나타냅니다. 이는 데이터베이스 조회, 매개변수 변수(예: 현재 시간대) 등에 따라 결과가 달라지는 함수에 대한 적절한 선택입니다. (다음에는 부적절합니다.이후현재 명령으로 수정된 행을 쿼리하려는 트리거.) 또한 다음 사항에 유의하세요.현재_타임스탬프함수 계열은 해당 값이 트랜잭션 내에서 변경되지 않으므로 안정적인 것으로 간주됩니다.

휘발성은 단일 테이블 스캔 내에서도 함수 값이 변경될 수 있으므로 최적화가 이루어질 수 없음을 나타냅니다. 이런 의미에서 휘발성인 데이터베이스 기능은 상대적으로 적습니다. 몇 가지 예는 다음과 같습니다무작위(), currval(), timeofday(). 그러나 호출이 최적화되는 것을 방지하려면 결과가 상당히 예측 가능하더라도 부작용이 있는 모든 함수는 휘발성으로 분류되어야 합니다. 예는 다음과 같습니다setval().

자세한 내용은 참조PostgreSQL : 문서 : 9.5 : 사설 토토 변동성 범주.

누출방지

누설 방지함수에 부작용이 없음을 나타냅니다. 반환 값 외에는 인수에 대한 정보를 공개하지 않습니다. 예를 들어 일부 인수 값에 대해서는 오류 메시지를 표시하지만 다른 인수 값에는 오류 메시지를 표시하지 않거나 오류 메시지에 인수 값을 포함하는 함수는 누출 방지 기능이 없습니다. 이는 시스템이 생성된 뷰에 대해 쿼리를 실행하는 방법에 영향을 미칩니다.security_barrier행 수준 보안이 활성화된 옵션 또는 테이블. 시스템은 데이터의 부주의한 노출을 방지하기 위해 비누출 방지 기능이 포함된 쿼리 자체에서 사용자가 제공한 조건보다 먼저 보안 정책 및 보안 장벽 보기의 조건을 적용합니다. 누출 방지로 표시된 기능과 연산자는 신뢰할 수 있는 것으로 간주되며 보안 정책 및 보안 장벽 관점의 조건 이전에 실행될 수 있습니다. 또한 인수를 취하지 않거나 보안 장벽 뷰 또는 테이블에서 인수가 전달되지 않은 함수는 보안 조건 이전에 실행되도록 누출 방지로 표시할 필요가 없습니다. 참조PostgreSQL : 문서 : 9.5 :스포츠 토토 베트맨 만들기그리고PostgreSQL : 문서 : 9.5 : 스포츠 토토 사이트 및 권한. 이 옵션은 슈퍼유저만 설정할 수 있습니다.

NULL 입력 시 호출됨
NULL 입력 시 NULL을 반환합니다.
STRICT

NULL 입력 시 호출됨(기본값)은 인수 중 일부가 null인 경우 무지개 토토가 정상적으로 호출됨을 나타냅니다. 필요한 경우 null 값을 확인하고 적절하게 응답하는 것은 무지개 토토 작성자의 책임입니다.

NULL 입력 시 NULL을 반환합니다.또는STRICT은 인수 중 하나라도 null일 때마다 무지개 토토가 항상 null을 반환함을 나타냅니다. 이 매개 변수를 지정하면 null 인수가 있는 경우 무지개 토토가 실행되지 않습니다. 대신 null 결과가 자동으로 가정됩니다.

[외부] 보안 호출자
[외부] 보안 정의자

보안 호출자함수를 호출하는 사용자의 권한으로 함수가 실행됨을 나타냅니다. 그게 기본값이에요.보안 정의자함수를 생성한 사용자의 권한으로 함수가 실행되도록 지정합니다.

핵심 단어외부는 SQL 적합성을 위해 허용되지만 SQL과 달리 이 기능은 외부 기능뿐만 아니라 모든 기능에 적용되므로 선택 사항입니다.

execution_cost

함수에 대한 예상 실행 비용을 단위로 제공하는 양수cpu_operator_cost. 함수가 집합을 반환하는 경우 이는 반환된 행당 비용입니다. 비용이 지정되지 않은 경우 C 언어 및 내부 기능의 경우 1단위로 간주되고 기타 모든 언어의 기능은 100단위로 간주됩니다. 값이 클수록 플래너는 필요한 것보다 더 자주 함수를 평가하지 않으려고 합니다.

결과_행

플래너가 무지개 토토가 반환할 것으로 예상하는 예상 행 수를 제공하는 양수입니다. 이는 무지개 토토가 집합을 반환하도록 선언된 경우에만 허용됩니다. 기본 가정은 1000행입니다.

configuration_parameter

SET절은 함수가 시작될 때 지정된 구성 매개변수가 지정된 값으로 설정되고 함수가 종료될 때 이전 값으로 복원되도록 합니다.현재부터 설정다음의 경우 현재 매개변수 값을 저장합니다.무지개 토토 생성무지개 토토 입력시 적용되는 값으로 실행됩니다.

만약에SET절이 무지개 토토에 첨부되면 a의 효과로컬 설정26703_26896SET명령(없음로컬)은를 재정의합니다.세트절, 이전과 마찬가지로로컬 설정명령: 이러한 명령의 효과는 현재 트랜잭션이 롤백되지 않는 한 함수 종료 후에도 지속됩니다.

참조PostgreSQL : 문서 : 9.5 : 배트맨 토토그리고토토 사이트 : 문서 : 9.5 : 서버 구성허용된 매개변수 이름 및 값에 대한 자세한 내용을 확인하세요.

정의

함수를 정의하는 문자열 상수; 의미는 언어에 따라 다릅니다. 내부 함수 이름, 개체 파일 경로, SQL 명령 또는 절차적 언어의 텍스트일 수 있습니다.

달러 인용을 사용하는 것이 종종 도움이 됩니다(참조섹션 4.1.2.4) 일반적인 작은따옴표 구문 대신 함수 정의 문자열을 작성합니다. 달러 따옴표가 없으면 함수 정의의 작은 따옴표나 백슬래시를 두 배로 늘려 이스케이프해야 합니다.

obj_file, link_symbol

이 형태의AS절은 C 언어 소스 코드의 함수 이름이 SQL 함수의 이름과 동일하지 않을 때 동적으로 로드 가능한 C 언어 함수에 사용됩니다. 문자열obj_file동적으로 로드할 수 있는 개체를 포함하는 파일의 이름이며link_symbol은 함수의 링크 기호, 즉 C 언어 소스 코드의 함수 이름입니다. 링크 기호가 생략되면 정의 중인 SQL 함수 이름과 동일한 것으로 간주됩니다. 모든 함수의 C 이름은 달라야 하므로 오버로드된 C 함수에 다른 C 이름을 지정해야 합니다(예: 인수 유형을 C 이름의 일부로 사용).

반복할 때무지개 토토 생성호출은 동일한 개체 파일을 참조하며, 파일은 세션당 한 번만 로드됩니다. 파일을 언로드하고 다시 로드하려면(아마도 개발 중에) 새 세션을 시작하세요.

속성

함수에 관한 선택적 정보를 지정하는 역사적 방법. 여기에는 다음 속성이 나타날 수 있습니다.

isStrict

다음과 동일함STRICT또는NULL 입력 시 NULL을 반환합니다..

isCachable

isCachable은 다음과 같은 구식 버전입니다.불변; 이전 버전과의 호환성 때문에 여전히 허용됩니다.

속성 이름은 대소문자를 구분하지 않습니다.

참조PostgreSQL : 문서 : 9.5 : 사용자 정의 스포츠 토토작성 함수에 대한 추가 정보를 확인하세요.

오버로딩

PostgreSQL무지개 토토 허용오버로딩; 즉, 서로 다른 입력 인수 유형이 있는 한 여러 다른 함수에 동일한 이름을 사용할 수 있습니다. 사용 여부에 관계없이 이 기능은 일부 사용자가 다른 사용자를 신뢰하지 않는 데이터베이스에서 함수를 호출할 때 보안 예방 조치를 수반합니다. 참조윈 토토 42 |_99.

두 함수는 이름이 동일하면 동일한 것으로 간주되며입력인수 유형, 모두 무시아웃매개변수. 따라서 예를 들어 이러한 선언은 충돌합니다.

무지개 토토 생성 foo(int) ...
함수 만들기 foo(int, out text) ...

다른 인수 유형 목록을 가진 함수는 생성 시 충돌하는 것으로 간주되지 않지만 기본값이 제공되면 사용 시 충돌할 수 있습니다. 예를 들어 다음을 고려하세요.

무지개 토토 생성 foo(int) ...
무지개 토토 생성 foo(int, int 기본값 42) ...

전화foo(10)어떤 무지개 토토를 호출해야 하는지에 대한 모호함으로 인해 실패합니다.

참고

전체SQL유형 구문은 함수의 인수 및 반환 값을 선언하는 데 허용됩니다. 그러나 괄호로 묶인 유형 수정자(예: 유형의 정밀도 필드숫자)는에 의해 삭제됩니다.무지개 토토 생성. 따라서 예를 들어Foo 무지개 토토 생성(varchar(10)) ...정확히 동일Foo(varchar) 무지개 토토 생성 ....

기존 함수를 다음으로 대체할 때무지개 토토 생성 또는 교체, 매개변수 이름 변경에 제한이 있습니다. 입력 매개변수에 이미 할당된 이름은 변경할 수 없습니다. 단, 이전에 입력 매개변수가 없었던 매개변수에 이름을 추가할 수는 있습니다. 출력 매개변수가 두 개 이상인 경우 출력 매개변수의 이름을 변경할 수 없습니다. 이렇게 하면 함수 결과를 설명하는 익명 복합 유형의 열 이름이 변경되기 때문입니다. 이러한 제한은 함수의 기존 호출이 교체될 때 작동이 중지되지 않도록 하기 위해 만들어졌습니다.

무지개 토토가 선언된 경우엄격VARIADIC인수, 엄격성 검사는 가변 배열을 테스트합니다.전체적으로은 null이 아닙니다. 배열에 null 요소가 있는 경우에도 무지개 토토가 호출됩니다.

다음은 시작하는 데 도움이 되는 몇 가지 간단한 예입니다. 자세한 내용과 예시는 다음을 참조하세요.PostgreSQL : 문서 : 9.5 : 사용자 정의 스포츠 토토.

CREATE FUNCTION add(정수, 정수) RETURNS 정수
    AS '$1 + $2 선택;'
    언어 SQL
    불변
    NULL 입력 시 NULL을 반환합니다.

인수 이름을 사용하여 정수를 증가시킵니다.PL/pgSQL:

CREATE OR REPLACE FUNCTION 증분(i 정수) $$로 정수를 반환합니다.
        시작
                RETURN i + 1;
        끝;
$$ 언어 plpgsql;

여러 출력 매개변수가 포함된 레코드를 반환합니다:

CREATE FUNCTION dup(in int, out f1 int, out f2 텍스트)
    AS $$ SELECT $1, CAST($1 AS 텍스트) || '는 텍스트입니다' $$
    언어 SQL;

SELECT * FROM dup(42);

명시적으로 명명된 복합 유형을 사용하여 동일한 작업을 더 장황하게 수행할 수 있습니다:

CREATE TYPE dup_result AS(f1 int, f2 텍스트);

무지개 토토 생성 dup(int)는 dup_result를 반환합니다.
    AS $$ SELECT $1, CAST($1 AS 텍스트) || '는 텍스트입니다' $$
    언어 SQL;

SELECT * FROM dup(42);

여러 열을 반환하는 또 다른 방법은 다음을 사용하는 것입니다.무지개 토토:

무지개 토토 생성 dup(int) 반환 테이블(f1 int, f2 text)
    AS $$ SELECT $1, CAST($1 AS 텍스트) || '는 텍스트입니다' $$
    언어 SQL;

SELECT * FROM dup(42);

그러나 a함수는 실제로 다음을 반환한다는 점에서 이전 예제와 다릅니다.설정단지 하나의 레코드가 아닌 여러 개의 레코드.

쓰기보안 정의자안전하게 무지개 토토함

왜냐면 a보안 정의자함수는 그것을 생성한 사용자의 권한으로 실행되므로 함수가 오용되지 않도록 주의가 필요합니다. 보안을 위해,검색_경로신뢰할 수 없는 사용자가 쓸 수 있는 모든 스키마를 제외하도록 설정해야 합니다. 이렇게 하면 악의적인 사용자가 함수에서 사용하는 객체를 가리는 객체를 생성하는 것을 방지할 수 있습니다. 이와 관련하여 특히 중요한 것은 기본적으로 먼저 검색되고 일반적으로 누구나 쓸 수 있는 임시 테이블 스키마입니다. 임시 스키마를 마지막에 검색하도록 하여 안전하게 배열할 수 있습니다. 이렇게 하려면 다음을 작성하세요.pg_temp의 마지막 항목으로검색_경로. 이 함수는 안전한 사용법을 보여줍니다.

CREATE FUNCTION check_password(TEXT 이름 취소, TEXT 전달)
부울을 $$로 반환합니다.
DECLARE가 BOOLEAN을 통과했습니다.
시작
        SELECT (pwd = $2) INTO가 전달되었습니다.
        비밀번호에서
        사용자 이름 = $1;

        반환이 통과되었습니다.
끝;
$$ 언어 plpgsql
    보안 정의자
    -- 보안 검색_경로(신뢰할 수 있는 스키마, 'pg_temp')를 설정합니다.
    SET search_path = 관리자, pg_temp;

이전PostgreSQL버전 8.3,SET옵션을 사용할 수 없으므로 이전 함수에는 저장, 설정 및 복원을 위한 다소 복잡한 논리가 포함될 수 있습니다.검색_경로.SET이 목적으로 옵션을 사용하는 것이 훨씬 쉽습니다.

또 다른 명심해야 할 점은 기본적으로 실행 권한이 다음에 부여된다는 것입니다.공개새로 생성된 함수의 경우(참조PostgreSQL : 문서 : 9.5 : 스포츠 토토 베트맨자세한 정보는). 보안 정의자 기능의 사용을 일부 사용자에게만 제한하고 싶은 경우가 많습니다. 그렇게 하려면 기본값을 취소해야 합니다.공개권한을 부여한 다음 선택적으로 실행 권한을 부여합니다. 모든 사람이 새 기능에 액세스할 수 있는 창을 피하려면 해당 기능을 만들고 단일 트랜잭션 내에서 권한을 설정하십시오. 예를 들면:

시작;
CREATE FUNCTION check_password(TEXT 이름 변경, TEXT 전달) ... 보안 정의자;
PUBLIC에서 함수의 모든 항목을 취소합니다. check_password(TEXT 이름 변경, TEXT 전달);
관리자에게 함수에 대한 실행 권한을 부여합니다. check_password(TEXT 이름 바꾸기, TEXT 전달);
커밋;

호환성

A 무지개 토토 생성명령은 SQL:1999 이상에 정의되어 있습니다.PostgreSQL버전이 비슷하지만 완전히 호환되지는 않습니다. 속성은 이식 가능하지 않으며 사용 가능한 다른 언어도 마찬가지입니다.

다른 데이터베이스 시스템과의 호환성을 위해,argmode앞이나 뒤에 쓸 수 있습니다.argname. 하지만 첫 번째 방법만 표준을 준수합니다.

매개변수 기본값의 경우 SQL 표준은 다음과 같은 구문만 지정합니다.기본값키워드. 의 구문=T-SQL 및 Firebird에서 사용됩니다.